Php mysql查询失败原因不明(对我来说)

Php mysql查询失败原因不明(对我来说),php,mysql,Php,Mysql,错误只显示了查询的一部分,有人能看到我犯的错误吗 我想得到的是基于标签的条目,有3个表,nv_条目,nv_标签和nv_图像。如果标签位于nv_标签表中,则应使用该表中的entrie_id从nv_条目和nv_图像中获取内容 这些表如下所示: nv_entries: id - title - year - etc.. nv_tags: id - entrieid - tag nv_images: id - entrieid - source 查询失败:您的SQL语法有错误;检查与您的MySQL

错误只显示了查询的一部分,有人能看到我犯的错误吗

我想得到的是基于标签的条目,有3个表,nv_条目,nv_标签和nv_图像。如果标签位于nv_标签表中,则应使用该表中的entrie_id从nv_条目和nv_图像中获取内容

这些表如下所示:

nv_entries:
id - title - year - etc..

nv_tags:
id - entrieid - tag

nv_images:
id - entrieid - source
查询失败:您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解在第1行使用near“GROUP BY nv_entries ON nv_entries.id=nv_tags.entrie_id和nv_tags.tag IN”的正确语法

在下面的脚本中生成的查询如下所示:

nv_entries:
id - title - year - etc..

nv_tags:
id - entrieid - tag

nv_images:
id - entrieid - source

按nv_条目分组在nv_条目上加入。id=nv_tags.entrie_id和nv_tags.tag IN('tree','green')具有计数(不同的nv_tags.tag)=2

这是脚本(部分):

for($i=0;$i
您的查询格式不正确

冷风应符合以下要求:

$sql ="
select e.*, i.*, group_concat( t.tag separator ',') as tag_list
from nv_entries e
JOIN nv_tags t on t.entrie_id = e.id
LEFT JOIN nv_images i on i.entrie_id = e.id

where t.tag in ( $tag_list )
group  by e.id
having count(t.id) = $num_tags ";
添加与图像的连接

此查询将使用LEFT每个图像返回一行,如果缺少图像,请避免缺少行


查询的第一部分在哪里(例如,
从中选择此…
)?是的,当组合SQL子句的随机块时,通常不会获得有效的SQL。什么不清楚?
GROUP BY
JOIN
的顺序不正确,而且
JOIN
上的
之间缺少一些内容。我对这一点很陌生。如果我在开头加上这个,可以吗
SELECT*FROM nv_entries
(我可以在30分钟内检查,但不是现在,但我真的必须尽快完成,因为有人在依赖我)谢谢,也许是时候买一本关于mysql的好书了,看起来不难,但从它开始也不容易。谢谢你的草稿很值钱,看起来很有用。图像的连接应位于哪一行?(如果没有图像,这必须是左连接吗?)。最后,我还将选择属于entrie的所有标记。
查询失败:“字段列表”中的未知列“e.tag”
我将第一行更改为这一行,希望能够修复它:
选择e.*,i.*,t.*,group_concat(t.tag separator',')作为标记列表。
没有错误,但当我回显时,我看到了
[tag=>树[tag list]=>树
其中仅显示已使用的标记,而entrie有更多标记。它显示为double很好,但是其中任何一个都应该包含所有标记。谢谢你帮了这么多忙,是我的错。“e”是nv_条目的别名,“t”表示nv_标记,“i”表示nv_图像,因此列必须与表一致:)它如何从entrie返回所有标记?问题是我必须在页面结果上显示所有标记,并突出显示在哪里键入的标记以查找匹配项。
$sql ="
select e.*, i.*, group_concat( t.tag separator ',') as tag_list
from nv_entries e
JOIN nv_tags t on t.entrie_id = e.id
LEFT JOIN nv_images i on i.entrie_id = e.id

where t.tag in ( $tag_list )
group  by e.id
having count(t.id) = $num_tags ";