如何只显示一个结果

时间:2012-03-27 05:11:50

标签: php mysql

我有一个我正在处理的脚本,它根据标题的第一个字母检索结果。我有链接A-Z,您可以单击它,它将显示从该字母开始的所有结果。我的问题是我试图显示table1中的数据并显示该结果的图像(如果不存在于table2中),如果不存在则表示只显示来自table1的结果数据。

我的脚本似乎工作正常,但如果表2中存在多个与表1中的link_id匹配的图像,那么它将多次显示结果。 我试图想办法只从表2中拉出1个图像,即使存在与table1中的link_id相等的更多图像。我在表2中创建了一个名为default_image的列,每个具有多个图像的link_id都将其中一个图像设置为1作为默认值,所有其他图像设置为0。

如何显示仅包含默认图像或根本没有图像的结果“这意味着如果table2中没有可用的图像链接到table1中的link_id,则表1中的结果文本仍将显示”。

这就是我在做什么。

$letter = $_GET['letter'];
$sql = "
select 
    s.link_id, 
    s.title, 
    i.media_id, 
    i.link_id, 
    i.media_link,
    i.title 
from table1 as s 
LEFT JOIN images as i on (i.link_id = s.link_id) 
where s.title like '$letter%' 
and s.def = i.title";

$result = mysql_query($sql) or die($CONF['debug']?("ERROR: mysql query failed: ".mysql_error()):"ERROR: Please try later");
while($row = mysql_fetch_array($result)){
    $letter = $_GET['letter'];
    //echoing all data here
}

尽量让自己尽可能清楚。我基本上试图查询数据库并显示table1数据和table2“图像”数据(如果存在任何图像),如果不是只显示table1数据并确保我只显示默认图像,如果存在多个图像。

任何人都有任何关于该做什么的想法? 感谢。

编辑: 使用GROUP BY修复。谢谢你曾经建议并删除他们的评论。我完全忘记了分组。

1 个答案:

答案 0 :(得分:0)

使用此查询:

select 
s.link_id, 
s.title, 
i.media_id, 
i.link_id, 
i.media_link,
i.title 
from table1 as s 
LEFT JOIN images as i on (i.link_id = s.link_id) 
where s.title like '$letter%' 
and s.def = i.title
order by i.default_image DESC
limit 1

只需要按default_image字段降序排序(非空行将位于顶部)并将查询限制为1,因此只取第一行(如果有多个)。