Php 从一个单元格中包含多个id的mysql表获取
我有一张桌子:Php 从一个单元格中包含多个id的mysql表获取,php,mysql,Php,Mysql,我有一张桌子: id|orders|user|status| 1 |1,2,5 |1 |1 | 2 |75 |2 |0 | 3 |31,4 |5 |1 | 我对数据库的请求应该是什么,以便通过订单列中的订单号接收发票状态 在我看来,在这里使用LIKE的方法并不合适,因为它会选择不正确的值 $sql = "SELECT status FROM invoices WHERE orders LIKE '%".$ord
id|orders|user|status|
1 |1,2,5 |1 |1 |
2 |75 |2 |0 |
3 |31,4 |5 |1 |
我对数据库的请求应该是什么,以便通过订单列中的订单号接收发票状态
在我看来,在这里使用LIKE的方法并不合适,因为它会选择不正确的值
$sql = "SELECT status FROM invoices WHERE orders LIKE '%".$order_id."%'";
你想要的是
$sql = "SELECT status
FROM invoices
WHERE CONCAT(',', orders, ',') LIKE '%,".$order_id.",%'";
假设没有使用空间,您可以尝试此操作
$sql =<<<REQQ
SELECT status
FROM invoices
WHERE orders LIKE '{$order_id}'
OR orders LIKE '{$order_id},%'
OR orders LIKE '%,{$order_id},%'
OR orders LIKE '%,{$order_id}'
REQQ;
//end
$sql=规范化表并停止在同一字段中保存多个值。同意。这样做会让你陷入一场编码噩梦。每行一个值是标准值。还可以使用参数化查询来避免sql注入。由于某些原因,它可能会重复,但并不总是给出正确的值。哪些情况下找不到正确的值?订单字符串上有空格吗?没有,我没有空格。例如,无法从“605604415367339338”中找到任何id,但可以从“512511”或“19”中找到。Mystic与上面Florent编写的查询一样,也是出于某种原因,如果我搜索状态表单order_id 250,它将返回1,但实际状态是0,您可以更精确一些。您正在查找的id是什么?db上的订单是什么。因为如果你正在寻找多个id,你将无法做到这一点。19个不在名单上