我多次搜索这个问题的答案(在 SO 和其他地方),但没有找到真正符合我需求的答案(如果有,我提前道歉)。
我有一个使用 PHP 的查询,它从数据库 (WordPress) 返回一个数组。基本上我想做的是查看列的值,然后根据该值进行 LIMIT。这是为了更好的想法而返回的数组:
http://pastebin.com/AC043qfh http://pastebin.com/AC043qfh
在查询中,您会注意到的值post_parent
对几个返回的数组重复。我想做的就是根据以下条件将其限制为 3post_parent
值例如我想要 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
,但这并没有得到我想要的。任何帮助表示赞赏。
EDIT只是为了澄清一下,这些是我想要的结果:http://pastebin.com/pWXdUuXv http://pastebin.com/pWXdUuXv
这可能会起作用:
(我假设 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
;
EDIT:尝试在排名中包含类别,这样它才会真正起作用。
两次指定条件有点难看,但我没有看到一个简单的方法来解决它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)