我正在尝试使用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 |
不确定我能用其他方法做到这一点?我尝试将或更改为||认为不同的优先权会导致另一个结果,但后来我只得到俄罗斯专栏。
我没有想法,你们是我唯一的希望!
答案 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>';
}
}
试试这个