php - 选择连接 MYSQL

标签 php mysql sql join

我有 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/

相关文章:

mysql - 如果我们使用谓词对 View 进行查询,数据库服务器是否会将谓词推送到 View 的下划线查询?

php - CakePHP 3 - 通过其他表连接?

SQL:列 <> '%TEST%' 不起作用,为什么?

php - SCORM 与 PHP/Yii 的集成

php - ci : handling session in a database without update privilege

PHP strtr 根本不起作用

mysql - 插入 ... 在重复 key 更新与截断/插入时

php - 如何删除php中的html标签?

java - 具有多个 where 条件的右外连接

php - SQL - 在单个查询中计算多个列并加入