用于搜索的SQL查询帮助

时间:2014-03-25 21:11:32

标签: php html mysql sql search

我有3个名为"图片"," pictag"和#34;标记"。 有一个搜索框,用户在其中键入要搜索的图像的名称。当用户输入这个术语时,我希望它说出名称,描述和图像。

例如,如果用户"标签"带有' sun'的图像那么这个图像不会显示出来。 我尝试了很多东西,但我认为我的代码中可能存在阻止这种情况的东西。我可以使用哪种查询作为我试图执行的查询,当"标记"正在寻找?

查询是:

$sql = "
    SELECT pictures.idpic, pictures.name, pictures.info, pictag.tagpicID, pictag.pictagName, tagging.IDimage, tagging.tagpicID 
    FROM pictures, pictag, tagging 
    WHERE pictures.idpic = '$searchvalueentered ' 
    AND pictag.tagpicID= '$searchvalueentered ' 
    AND tagging.tagpicID= '$searchvalueentered '";

4 个答案:

答案 0 :(得分:0)

我不太明白你在做什么以及这三张桌子的用途是什么,但是你试过使用" OR"在你的where子句而不是" AND"。我预感到问题出在那里。

答案 1 :(得分:0)

试试这个。

$sql = "
    SELECT pictures.idpic, pictures.name, pictures.info, pictag.tagpicID, pictag.pictagName, tagging.IDimage, tagging.tagpicID 
    FROM pictures, pictag, tagging 
    WHERE pictures.idpic = '" . $searchvalueentered . "' 
    OR pictag.tagpicID = '" . $searchvalueentered . "' 
    OR tagging.tagpicID = '" . $searchvalueentered . "'
";

顺便说一句,你应该考虑使用准备好的陈述。这非常不安全。

答案 2 :(得分:0)

$sql = "
    SELECT pictures.idpic, pictures.name, pictures.info, pictag.tagpicID, pictag.pictagName, tagging.IDimage, tagging.tagpicID 
    FROM pictures, pictag, tagging
    WHERE pictures.idpic = '$searchvalueentered ' 
    OR pictag.tagpicID= '$searchvalueentered ' 
    OR tagging.tagpicID= '$searchvalueentered '";

会工作,但你真的想加入你的桌子,否则你的结果会得到重复的记录(也许这就是你想要的)。

假设pictag和tagging是你的图片表的1:1关系,我建议你尝试这种方法:

SELECT pictures.idpic, pictures.name, pictures.info, pictag.tagpicID, pictag.pictagName, tagging.IDimage, tagging.tagpicID 
FROM pictures
LEFT JOIN pictag ON pictures.idpic = pictag.tagpicID
LEFT JOIN tagging ON pictures.idpic = tagging.tagpicID
WHERE pictures.idpic = '$searchvalueentered';

我无法为您测试查询,但我怀疑这会产生预期结果,因为所有表都与“idpic”键相关。

答案 3 :(得分:0)

正如David所说,你应该尝试加入你的表来消除重复并简化搜索,你可以试试..

SELECT 
    pictures.idpic, 
    pictures.name, 
    pictures.info, 
    pictag.tagpicID, 
    pictag.pictagName, 
    tagging.IDimage, 
    tagging.tagpicID 
FROM pictures
INNER JOIN pictag 
    ON pictures.idpic = pictag.tagpicID
INNER JOIN tagging 
    ON pictures.idpic = tagging.tagpicID
WHERE 
    CONCAT_WS(' ',pictures.idpic,pictag.tagpicID,tagging.tagpicID) LIKE %$searchvalueentered%

注意:不是一个非常优化的解决方案。