Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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 如何按照我在“in”条件中指定的行id的顺序对mysql结果进行排序_Php_Mysql_Sql_Database - Fatal编程技术网

Php 如何按照我在“in”条件中指定的行id的顺序对mysql结果进行排序

Php 如何按照我在“in”条件中指定的行id的顺序对mysql结果进行排序,php,mysql,sql,database,Php,Mysql,Sql,Database,查询是: SELECT * FROM `stock` WHERE `stockid` IN (33, 12,53,4,99,88) 但是当我运行查询时,它不会按33、12、53等顺序返回行 我正在使用php。以上是一个简化的示例。您可以使用“按字段排序” SELECT * FROM `stock` WHERE `stockid` IN (33, 12,53,4,99,88) order by field(stockid,33, 12,53,4,99,88) 也许您可以创建一个包含两列“

查询是:

   SELECT * FROM `stock` WHERE `stockid` IN (33, 12,53,4,99,88)
但是当我运行查询时,它不会按33、12、53等顺序返回行


我正在使用php。以上是一个简化的示例。

您可以使用“按字段排序”

SELECT * FROM `stock` WHERE `stockid` IN (33, 12,53,4,99,88)
order by field(stockid,33, 12,53,4,99,88)

也许您可以创建一个包含两列“stockIdColumn”、“orderColumn”的临时表

| STOCKID | ORDER |
|      33 |     1 |
|      12 |     2 |
|      53 |     3 |
|       4 |     4 |
|      99 |     5 |
!      88 |     6 |
将此表与您的和按列排序的[order]联接

SELECT s.*
FROM stock s JOIN temp t ON t.stockId = s.id
ORDER BY t.order

不要认为这是真正的答案,但另一种方式是:

SELECT * FROM stock WHERE stockid IN (33)
UNION SELECT * FROM stock WHERE stockid IN (12)
UNION SELECT * FROM stock WHERE stockid IN (53)
UNION SELECT * FROM stock WHERE stockid IN (4)
UNION SELECT * FROM stock WHERE stockid IN (99)
UNION SELECT * FROM stock WHERE stockid IN (88)
;

它不适用于我从[OrderDetails]中选择*,其中11,72,42,14 order中的productid按字段productid,11,72,42,14->错误1无法准备语句添加与其相关的完整代码以准备语句不查询。在DB中运行此查询,将得到您想要的结果。