gpt4 book ai didi

mysql - 在字符串中按 id 选择行,id 以逗号分隔

转载 作者:太空宇宙 更新时间:2023-11-03 10:45:52 25 4
gpt4 key购买 nike

我必须编写一个 mysql 查询,它将通过 id 从 wp_posts 表(post_type 附件)中获取行,该 id 在 wp_postmeta 中以逗号分隔的 id 字符串内。

听起来很复杂,其实很简单,举个例子:

如果表有以下数据:

wp_posts:
ID | post_type
1 | attachment
2 | attachment
3 | attachment
4 | contest
5 | contest

wp_postmeta:
ID | post_id | meta_key | meta_value
1 | 4 | contest_works | 1,2
1 | 5 | contest_works | 3

运行查询后我想得到:

ID | post_type
1 | attachment
2 | attachment
3 | attachment

我想出了下面的查询,但出于某种原因它返回了帖子类型竞赛而不是附件的行。

SELECT * FROM wp_posts work
INNER JOIN wp_posts AS contest ON
(
SELECT meta_value
FROM wp_postmeta contestmeta
WHERE contest.ID = contestmeta.post_id AND contestmeta.meta_key = 'contest_works'
) LIKE CONCAT('%', work.ID, '%') AND contest.post_type = 'contest'
WHERE work.post_type = 'attachment'

如果有任何帮助,我将不胜感激:)

最佳答案

只需使用find_in_set():

SELECT p.*
FROM wp_posts p INNER JOIN
wp_postmeta pm
on pm.meta_key = 'contest_works' and
find_in_set(p.id, pm.meta_value)
WHERE p.post_type = 'attachment';

以逗号分隔的列表存储列表是非常不鼓励的。唉,这在 Word Press 数据模型中似乎是一个合理的数据结构。

Here是一个 SQL fiddle 。此外,随着数据规模的扩大,这将是一个非常慢的查询。您在将列表存储为字段时遇到问题。更好的解决方案是每行存储一个值。

关于mysql - 在字符串中按 id 选择行,id 以逗号分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31840162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com