我有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 '";
答案 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%
注意:不是一个非常优化的解决方案。