2011-05-16 43 views
1

我有两个表,我需要从(classifieds_items和附件)拉记录。分类项目的图像存储在不同的表格(附件)中,每个分类的图像可能有多个。我需要为每个分类项目拉一张图片。下面的声明的问题是它会复制结果与项目有多个图像。MySQL加入唯一

$sql = "SELECT * 
      FROM classifieds_items 
      JOIN (attachments) ON (attachments.attach_rel_id = classifieds_items.item_id) 
     WHERE active = 1 
      AND open = 1 
      AND date_expiry > ". time()." 
      AND attachments.attach_rel_module = 'classifieds' 
     ORDER BY RAND() 
     LIMIT 4"; 

$rs = mysql_query($sql);  

if(mysql_num_rows($rs)>0) { 
    while($row=mysql_fetch_array($rs)) { 
    $dtl_list .="<div class='fclass'> 
       <span class='fctitle'><a class='albumlnk' href='#'>".stripslashes($row['name']). '</a></span><br /> 
       <img src="uploads/'.stripslashes($row['attach_thumb_location']).'" /><br /> 
       '.stripslashes($row['price'])." 
       </div>"; 
    } 
} 

echo $dtl_list; 
+0

我猜你想在分组的JOIN工作,并把它在某种程度上更合适的而不是快速使用DISTINCT – haknick 2011-05-16 00:34:11

+0

如果可以有多个每个分类的附件,然后我会说查询工作正常。如果你只想为每个分类记录一个记录,那么你可以做到这一点 - 但你想要哪个图像? – 2011-05-16 00:44:44

回答

1

在MySQL中,你可以再补充GROUP BY classifieds_items.item_id

`$sql = "SELECT * 
      FROM classifieds_items 
      JOIN (attachments) ON (attachments.attach_rel_id = classifieds_items.item_id) 
     WHERE active = 1 
      AND open = 1 
      AND date_expiry > ". time()." 
      AND attachments.attach_rel_module = 'classifieds' 
     GROUP BY classifieds_items.item_id 
     ORDER BY RAND() 
     LIMIT 4";` 
+0

像魅力一样工作!谢谢 – user754948 2011-05-16 01:16:51

+0

Np。如果它有帮助,我会期待你+1。 – a1ex07 2011-05-16 13:24:30