Php MYSQL有其他选择吗
我想根据他们的标签找到一些记录。为了找出记录中有哪些标记,我使用子查询将它们添加到结果中。为了找出应该返回哪些结果,我在查询的末尾添加了having语句。但我觉得这不是最好的办法Php MYSQL有其他选择吗,php,mysql,subquery,having,Php,Mysql,Subquery,Having,我想根据他们的标签找到一些记录。为了找出记录中有哪些标记,我使用子查询将它们添加到结果中。为了找出应该返回哪些结果,我在查询的末尾添加了having语句。但我觉得这不是最好的办法 SELECT e.id, e.title, e.text, e.introduction, UNIX_TIMESTAMP(e.starts_on) AS starts_on, UNIX_TIMESTAMP(e.ends_on) AS ends_on, m.id AS meta_id, m.url,
SELECT e.id, e.title, e.text, e.introduction,
UNIX_TIMESTAMP(e.starts_on) AS starts_on,
UNIX_TIMESTAMP(e.ends_on) AS ends_on,
m.id AS meta_id,
m.url,
cm.title AS category_title,
cm.url AS category_url,
CONCAT(
",",
(
SELECT GROUP_CONCAT(t.id)
FROM modules_tags AS mt
JOIN tags AS t ON t.id = mt.tag_id
WHERE mt.other_id = e.id
),","
) AS tags_search
FROM event_posts AS e
INNER JOIN meta AS m ON e.meta_id = m.id
LEFT JOIN event_categories AS c ON e.category_id = c.id
LEFT JOIN meta AS cm ON c.meta_id = cm.id
LEFT JOIN modules_tags AS mt ON mt.other_id = e.id
LEFT JOIN tags AS t ON t.id = mt.tag_id
WHERE 1 HAVING tags_search LIKE '%,5,%' AND tags_search LIKE '%,6,%'
是在MySQL中查找逗号分隔值的最佳方法。是在MySQL中查找逗号分隔值的最佳方法。在这种情况下不需要使用。在GROUP BY之后有过滤器,而在GROUP BY之前有过滤器。所以WHERE子句在这种情况下也会做同样的事情。我还没有测试过它,所以它可能不起作用,但除非在查询之后需要在代码中搜索标记,然后,您可以在子查询中放置您在have中拥有的过滤器,但将该子查询移动到带有EXISTS表达式的主查询的WHERE子句。在这种情况下,have是不必要的。在GROUP BY之后有过滤器,而在GROUP BY之前有过滤器。所以WHERE子句在这种情况下也会做同样的事情。我还没有测试过它,所以它可能不起作用,但是除非在查询之后需要在代码中搜索标记,否则您可以在子查询中放置过滤器,但将该子查询移动到带有EXISTS表达式的主查询的WHERE子句。