php - MYSQL JOIN 有条件地根据逗号分隔列表检查整数

标签 php mysql inner-join sqldatatypes

我有一个 SQL SELECT 语句,其中使用了 3 个表。 我正在使用 INNER JOIN 来连接表,但是我遇到了一些问题,因为我希望连接条件所基于的两列是不同的数据类型; 一个是整数 - 产品表的 id,可以在下面看到为 p.id。 另一个是订单表中这些 id 的逗号分隔字符串。客户可以一次订购多个产品,因此产品 ID 存储为逗号分隔列表。

这是我使用 SQL 的进展情况:

"SELECT o.transaction_id, o.payment_status, o.payment_amount, o.product_id, o.currency, o.payment_method, o.payment_time, u.first_name, u.last_name, u.email, p.title, p.description, p.price
FROM orders AS o
INNER JOIN products AS p ON ( NEED HELP HERE--> p.id IN o.product_id comma delimited list)
INNER JOIN users AS u ON ( o.user_id = u.id ) 
WHERE user_id =  '39'
ORDER BY payment_time DESC 
LIMIT 1";

也许我可以使用正则表达式?目前,逗号分隔列表读取为“2,1,3” - 但是字符数不受限制 - 因此我需要一个条件来检查我的产品 id (p.id) 是否在此 o.product_id 列表中?

最佳答案

您所拥有的是一对多关系的完美示例,其中您有一个订单和附加的多个项目。您应该有一个链接表,例如

order_product - 它在 orderid 和 Productid 之间建立连接,您还可以在其中放置两者之间关系的特定数据(例如添加商品的时间、数量等)

然后,您使用此表进行联接,并且到处都有相同的字段类型。

简单的例子:

select 
    /* list of products */
from
    order o,
    order_product op,
    product p
where 
    o.id = 20
and o.id = op.orderid
and op.productid = p.id

关于php - MYSQL JOIN 有条件地根据逗号分隔列表检查整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17993911/

相关文章:

php - mySQL 在一个查询但三个表中使用复杂连接列出配置文件和电影

mysql - 复杂的 MySQL 连接语句

php - 来自 codeigniter 的 Mysql 存储过程调用

php - 更改表中行的颜色

mysql - 我的 SELECT 语句中的 SQL 语法错误

Mysql 查询 rand() 并排序

MySQL 连接表

php - 404 自定义错误页面重定向不显示丢失的文件 URL

php - stripos 在数字比较时返回 false

MySQL 关于 employee 和 staff 以及使用连接的空值