gpt4 book ai didi

php - 选择连接 MYSQL

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

我有 2 个表,分别是 useruserdata

一旦客户购买了产品,它将插入表userdatauser中。

user表中,产品id以“id, id ,id ,id ,id”的形式记录在user.buyid中”。

示例:“23, 24”。因此,我尝试使用这些查询从产品中获取 id ( 23, 24 ) 的所有行

SELECT * FROM `userdata`,`user` WHERE `userdata`.`id` IN (`user`.`buyid`);

查询返回 1 行产品,id=23

SELECT * FROM `user` INNER JOIN `userdata` ON `userdata`.`id` IN (`user`.`buyid`);

这也仅返回 1 行 id 为 23 的产品。

预期结果每行返回:

user.id | user.name | user.contact | product.id | product.name
1 | nazmi | 99999 | 23 | A
1 | nazmi | 99999 | 24 | B

最佳答案

修复您的数据模型!在字符串中存储 id 列表非常糟糕,非常糟糕:

  • 您的 ID 是一个整数。它应该存储为数字,而不是字符串。
  • 您的 ID 引用了另一个表。它应该正确声明外键关系。
  • 一列应包含单个列。
  • SQL 有一种很好的存储列表的方法。真的很强大。它被称为“表”而不是“字符串列”。
  • SQL 中的字符串处理能力相当差。
  • 使用此类数据结构的查询无法利用索引和分区。

有时,您会被其他人非常非常非常错误的决定所困扰。 MySQL 提供了一个很好的函数(在我看来太好了)来帮助:

SELECT *
FROM user u JOIN
userdata ud
ON find_in_set(ud.id, u.buyid) > 0;

如果你的 id 列表中有空格,那么你需要删除它们。并且分隔符必须是逗号。

SELECT *
FROM user u JOIN
userdata ud
ON find_in_set(ud.id, replace(u.buyid, ' ', '')) > 0;

关于php - 选择连接 MYSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50388271/

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