并行MySQL查询HTML表 - WHILE(x或y)?

时间:2012-11-19 04:08:49

标签: php mysql sql

我正在尝试使用PHP创建表。我需要的是一个有两列的表。

所以我有一个包含4个字段的SQL表 - 主键id,语言,单词和定义。每种语言都是阿拉伯语或俄语。

我想要一个执行以下操作的表:

|     defintion      |
|____________________|
|                    |
| rus1   |  arab1    |
| rus2   |  arab2    |
| rus3   |  arab3    |
| rus4   |           |

因此,它按英文单词划分列表,为每个英文单词创建一个,然后在左栏中列出俄语等价物,在右栏中列出阿拉伯语。然而,两者的数量通常不同。我现在正在做的是在WHILE循环中运行WHILE循环。外循环运行正常,但我认为我正在做内循环错误。以下是大部分代码:

$definitions=mysql_query("SELECT DISTINCT definition FROM words")

WHILE($row=mysql_fetch_array($definitions)
{
  ECHO '<tr><th colspan="2">' . $row['definition'] . '</th></tr>';
  $russian="SELECT * FROM words WHERE language='Russian' AND definition='".$row['definition']."'";
  $arabic="SELECT * FROM words WHERE language='Arabic' AND definition='".$row['definition']."'";
  WHILE($rus=mysql_fetch_array($russian) or $arb=mysql_fetch_array($arabic))
  {
    ECHO '<tr><td>'.$rus['word'].'</td><td>'.$arb['word'].'</td></tr>';
  }
}
可悲的是,我得到的东西是这样的:

|     defintion      |
|____________________|
|                    |
| rus1   |           |
| rus2   |           |
| rus3   |           |
| rus4   |           |
|        |  arab1    |
|        |  arab2    |
|        |  arab3    |

不确定我能用其他方法做到这一点?我尝试将或更改为||认为不同的优先权会导致另一个结果,但后来我只得到俄罗斯专栏。

我没有想法,你们是我唯一的希望!

2 个答案:

答案 0 :(得分:1)

嗯,你基本上是这样说:“当(输出)做一行和一个单元格”然后在“做另一个和另一个”内部而不调整其他已经存在的单元格。

Tbh,我只是将每个表或mysql查询的结果放在一个数组中,使用array_merge将它们放入一个数组然后进行输出。

E.g。俄罗斯有4个结果,阿拉伯有3个,所以阵列看起来像这样:

array 
[1] 
Russian => Result
Arab =>
[2]
Russian => Result
Arab => Result
[3]
Russian => Result
Arab => Result
[4]
Russian => Result
Arab => NULL

然后做一个:

foreach (array as $definition) { output $definition['Russian'] - $definition['Arab'] }
祝你好运!

答案 1 :(得分:1)

$definitions=mysql_query("SELECT DISTINCT definition FROM words")

WHILE($row=mysql_fetch_array($definitions)
{
  ECHO '<tr><th colspan="2">' . $row['definition'] . '</th></tr>';
  $russian="SELECT * FROM words WHERE language='Russian' AND definition='".$row['definition']."'";
  $arabic="SELECT * FROM words WHERE language='Arabic' AND definition='".$row['definition']."'";
  WHILE($rus=mysql_fetch_array($russian) )
  {
        $arb=mysql_fetch_array($arabic)    
        ECHO '<tr><td>'.$rus['word'].'</td><td>'.$arb['word'].'</td></tr>';
  }
}

试试这个