在 MySQL 中使用 LIMIT 根据列值限制结果(PHP/MySQL)

问题描述 投票:0回答:1

我多次搜索这个问题的答案(在SO和其他地方),但还没有找到真正符合我需求的答案(如果有,我提前道歉)。

我有一个使用 PHP 的查询,它从数据库 (WordPress) 返回一个数组。基本上我想做的是查看列的值,然后根据该值进行限制。这是为了更好的想法而返回的数组:

http://pastebin.com/AC043qfh

在查询中,您会注意到

post_parent
的值在多个返回的数组中重复。我想要做的是根据
post_parent
值将其限制为 3,例如我想要 3 个条目,分别为
post_parent
79、87、100 等

我不太熟悉(参见:完全)MySQL 查询,但这就是我必须得到的数组:

SELECT DISTINCT ID, guid, post_parent, post_title 
FROM $wpdb->posts p 
WHERE p.post_type = 'attachment'
    AND p.post_mime_type LIKE 'image/%'
    AND p.post_status = 'inherit'
    AND p.post_parent IN
        (SELECT object_id FROM $term_relationships WHERE term_taxonomy_id = $post_term)

我尝试过使用

GROUP BY
,但这并没有得到我想要的。如有任何帮助,我们将不胜感激。

编辑只是为了澄清一下,这些是我想要的结果: http://pastebin.com/pWXdUuXv

php mysql arrays limit
1个回答
3
投票

这可能会起作用: (我假设 ID 是唯一的,如果不能替换的话)

SELECT
  p.ID, guid, post_parent, post_title
FROM (
SELECT
  a.ID as ID,
  COUNT(*) as rank
FROM (
  SELECT ID, post_parent
  FROM $wpdb->posts
  WHERE post_type = 'attachment'
    AND post_mime_type LIKE 'image/%'
    AND post_status = 'inherit'
  ) AS a
JOIN (
  SELECT ID, post_parent
  FROM $wpdb->posts
  WHERE post_type = 'attachment'
    AND post_mime_type LIKE 'image/%'
    AND post_status = 'inherit'
  ) AS b ON b.ID <= a.ID AND b.post_parent = a.post_parent
GROUP BY a.ID
) AS r
JOIN $wpdb->posts p ON r.ID = p.ID AND r.rank <= 3
WHERE p.post_parent IN (
  SELECT object_id FROM $term_relationships
  WHERE term_taxonomy_id = $post_term)
GROUP BY p.ID
;

编辑:尝试在排名中包含类别,以便它真正起作用。

指定两次条件有点难看,但我没有看到一个简单的方法来解决它。

© www.soinside.com 2019 - 2024. All rights reserved.