gpt4 book ai didi

php - MySQL + PHP WHERE IN(数字列表)仅适用于列表中的第一个数字

转载 作者:行者123 更新时间:2023-11-29 11:24:52 25 4
gpt4 key购买 nike

我正在 MySQL/PHP 中运行以下内容

SELECT * FROM `uc_posts` WHERE `postinguser` IN (SELECT `following` FROM `uc_users` WHERE `id` = 1) ORDER BY id DESC LIMIT 20

following的值是 1,2

但是由于某种原因,它只显示 postinguser 所在的行。是 1

确认我何时运行:

(SELECT `following` FROM `uc_users` WHERE `id` = 1)

它返回单元格 following内容为1,2

奇怪的是当我运行这个时:

SELECT * FROM `uc_posts` WHERE `postinguser` IN (1,2) ORDER BY id DESC LIMIT 20

它返回所需的结果,其中行同时具有 postinguser 12

专栏following结构为varchar(255) utf8_general_ci

你能看出这里出了什么问题吗?

谢谢。

最佳答案

您不应将数字列表存储在单列中作为分隔列表。 SQL 具有用于存储列表的出色数据结构;它被称为,而不是字符串列

在您的例子中,值'1,2'正是它看起来的样子:单个字符串。它将匹配另一个包含三个字符的字符串:一个、一个逗号和一个二。

有时,我们会被其他人糟糕的设计决策所困扰。如果是这样,您可以将条件写为:

SELECT p.*
FROM `uc_posts` p
WHERE EXISTS (SELECT 1
FROM `uc_users`
WHERE `id` = 1 AND find_in_set(postinguser, following) > 0
)
ORDER BY id DESC
LIMIT 20;

但是,我鼓励您更改数据结构,以便可以使用常规的JOIN。当您使用正确的数据结构时,性能会更好。

关于php - MySQL + PHP WHERE IN(数字列表)仅适用于列表中的第一个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38407151/

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