在MySQLi SELECT语句中指定或时,如何选择哪个先到

在MySQLi SELECT语句中指定或时,如何选择哪个先到,select,mysqli,Select,Mysqli,当您通过MySQLi语句检索数据时,例如: $sqls = "SELECT * FROM course WHERE course='$product_id_array' OR course='Both' ORDER BY ..."; $sqlsresults = mysqli_query($db_conx,$sqls); while($row = mysqli_fetch_assoc($sqlsresults)) { $selectedContent = $row["content"];

当您通过MySQLi语句检索数据时,例如:

$sqls = "SELECT * FROM course WHERE course='$product_id_array' OR course='Both' ORDER BY ...";
$sqlsresults = mysqli_query($db_conx,$sqls);
while($row = mysqli_fetch_assoc($sqlsresults)) {
    $selectedContent = $row["content"];
    $selectedTitle = $row["title"];
}

有没有办法先输出
“两者”的匹配项?这会像重新安排语句的
WHERE
部分的顺序一样简单吗

您的
orderby
仅按
id
显式排序。在查询的
WHERE
部分无法解决此问题。要更改结果的排序方式,请使用
orderby

SELECT *
FROM course
WHERE course=...
OR course='Both'
ORDER BY CASE course WHEN 'Both' THEN 0 ELSE 1 END ASC, id DESC

不相关的注意事项:如果
$product\u id\u array
包含不受信任的用户输入,则用户可以放置类似
'的内容;从课程中删除--在那里。仔细阅读参数化查询,了解如何防止这种情况。

您能重新表述您的问题吗?哇,当然可以。我只是读了一遍,没有任何意义。我保证英语是我的第一语言!$product\u id\u数组来自数据库。这就是你所说的“hvd”吗?@Chris这还不足以说明问题。如果不受信任的用户有任何方法操纵该变量的值,则是不安全的。这意味着,如果它直接来自数据库,重要的是不受信任的用户是否可以填写该字段。变量本身在某一点上确实来自用户在注册和选择时的信息。与任何其他变量类似。这不是积极调整的东西。这更清楚吗?基本上就是说,“这个客户买了这个”。它不是搜索的用户选择的输出。这更有意义吗?另外,你能再解释一下“案例”部分吗。我不确定如何利用它。@Chris不,不是“任何其他变量”。在很多情况下,变量并非以任何方式来自用户输入。无论如何,这不是你问题的重点。关于
CASE
:如果
课程='Both'
,则
案例课程的值为
0
,否则为
1
。把它想象成一个虚拟的专栏。由于
0<1
,按该顺序排序将导致
course='Both'
的记录首先出现。