PHP Mysql试图从不同的表中拉出多行(2个表上有3行,但3个表中没有4行)

时间:2011-03-31 00:24:10

标签: php mysql

我正在尝试从数据库中的不同表中提取多行。

如果我只有两个表中的前三行,它可以正常工作。只要我添加第三个表并尝试拉另一行就会中断!

最终我要做的是拉出图片,dayid,一个人的名字,然后是一个原因的名字。

imageURLOutfitday_id位于同一个表中,此人的姓名位于表Pilot中,原因名称位于表格原因中。< / p>

出于某种原因,它会从表imageUrl中拉出前两行(outfitDay_idOutfitimage),然后从{{拉出第3行(name) 1}},但如果我添加名称并尝试从Pilot表中提取它,则会失败。

Cause

2 个答案:

答案 0 :(得分:1)

可能是因为name列不明确。我猜你在nameCause(或其他一些表)中都有一个Pilot列。 MySQL无法猜测要从哪个表中检索列值,并且会发出错误(字段列表中的列名称不明确)。

确保在列名前加上表名,以消除歧义:

SELECT 
   imageUrl, outfitDay_id, Cause.name, Pilot.name 
FROM 
   OutfitImage, Pilot, Cause

答案 1 :(得分:0)

您正在尝试跨所有三个表进行交叉连接,但您没有创建任何条件来过滤它们。 FROM table1,table2,table3子句尝试跨所有三个表进行交叉连接。交叉连接意味着来自一个表的每一行与另一个表中的每一行配对。例如,假设我有三个表,每个表有两行。第一个表我叫两行jack和jill的名字,第二个表我叫第21和24行的年龄,第三个表是性别,有男性和女性行。如果我从名称,年龄,性别做一个子句,它将返回一个2 X 2 X 2 = 8行的表。

names ages genders
jack  21   male
jack  21   female
jack  24   male
jack  24   female
jill  21   male
jill  21   female
jill  24   male
jill  24   female

通常,当您进行交叉连接时,还要向WHERE添加条件以过滤掉没有意义的行。例如,从示例FROM子句中,您可能有一个WHERE genders.id = names.genders_id。在这种情况下,您要将名称与性别表中的特定性别行相关联。这可能也会解决您对LIMIT 1的需求。