我有一个我正在处理的脚本,它根据标题的第一个字母检索结果。我有链接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修复。谢谢你曾经建议并删除他们的评论。我完全忘记了分组。
答案 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,因此只取第一行(如果有多个)。