Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从一个单元格中包含多个id的mysql表获取_Php_Mysql - Fatal编程技术网

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个不在名单上