2012-03-27 118 views
0

我有一个脚本,我正在努力检索基于标题的第一个字母的结果。我有链接A-Z,您可以点击它,它会显示以该字母开头的所有结果。我的问题是我想显示table1的数据,并显示该结果的图像,如果不存在,如果不是,那么它只会显示table1的结果数据。如何显示只有一个结果

我的脚本似乎工作正常,但如果表2中存在多于一个图像与表1中的link_id匹配,那么它将多次显示结果。 我试图找出一种方法来只从table2拉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修复。谢谢谁曾建议并删除他们的评论。我完全忘了团队。

+3

您的脚本对SQL注入攻击开放。如果没有首先验证它是否安全使用,请勿使用$ _GET或$ _POST中的数据。使用mysql_real_escape_string或了解准备好的语句。 – GordonM 2012-03-27 07:01:11

+0

谢谢他,但我知道这一点。我只是想让它在本地主机上运行。如果我将它用于生产,我将确保对所有内容进行验证。 – chris 2012-03-27 07:47:19

回答

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限制你的查询,所以你只需要第一行(如果有不止一个)。