Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MYSQL有其他选择吗_Php_Mysql_Subquery_Having - Fatal编程技术网

Php MYSQL有其他选择吗

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,

我想根据他们的标签找到一些记录。为了找出记录中有哪些标记,我使用子查询将它们添加到结果中。为了找出应该返回哪些结果,我在查询的末尾添加了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,
  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子句。