2010-08-10 163 views
0

我的查询看起来像这样的时刻:,MySQL的查询两个表

$result = mysql_query("SELECT * FROM promo JOIN items ON promo.id = items.promo_id WHERE promo.id='$promo_id'") or die('Error : ' . mysql_error()); 
    while($row = mysql_fetch_array($result)) 
    { 
    echo "<p>".$row['title']."</p>"; 
    echo "<p>".$row['description']."</p>"; 
    echo "<p>".$row['filename']."</p>"; 
    } 

我想有以下落得:促销1

  • 标题

  • 这是促销1说明,这不是很棒?!

  • filename_1.jpg

  • filename_2.jpg和然而,许多文件链接到这个促销上市...

然而,根据上面的查询,我得到:

  • 这是促销1说明,这不是很好吗?!

  • filename_1.jpg

  • 这是促销1描述,是不是很棒?

  • filename_2.jpg

所以重复(我有点明白为什么),并在宣传片的“标题”不扯了!任何人都可以推荐问题是否与我的JOIN或我的PHP?非常感谢您的帮助:)

+0

数据库的外观如何? – Codler 2010-08-10 12:11:47

+1

如果您选择的是促销ID,它只会找到与该ID相关的促销,我的猜测是您有2个文件加入促销1 – Luke 2010-08-10 12:12:15

+0

我们可以查看“促销”和“商品”表的结构吗? – Bobby 2010-08-10 12:12:19

回答

0

可能会出现描述和文件名,因为这些名称仅存在于其中一个表上,但标题位于两个表上。

如果您使用查询:

SELECT 
    * 
FROM 
    promo JOIN items ON promo.id = items.promo_id WHERE promo.id='$promo_id'" 

字段的名称需要在路上table.field。预先指定您需要帮助您的字段的名称并仅提取需要的数据而非全部表格,这非常有用。这使得该方法更快地检索行并防止名称出现问题。

您也可以指定一个列机智的句子“AS” 的名称,例如:

SELECT 
    promo.title AS title, 
    promo.description AS description, 
    items.filename AS filename 
FROM 
    promo JOIN items ON promo.id = items.promo_id WHERE promo.id='$promo_id'" 

,你会得到一个表像(我设置好的就可以了虚数据):

title | description | filename 
------------------------------- 
title1|description1 | filename1 
title1|description1 | filename2 
title2|description2 | filename3 

提示:

  • 如果你得到了莫每个促销比一个项目重复所有数据在每一行上重复。

    • 您需要查询以显示每个促销的所有项目,而无需重复促销数据,进行更复杂的查询或添加一些代码。
  • 如果您没有任何促销项目,该促销不会出现在列表中。

    • 您需要使用list al promos和每个列表自己的项目来显示没有项目的promos或使用OUTER JOIN查询。
0

不要在您的查询中使用*****,而是指定您需要的列并应用适当的别名。