-1

次のような 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"];
}

'both'最初に一致を出力する方法はありますか? WHEREこれは、ステートメント の一部の順序を並べ替えるのと同じくらい簡単でしょうか?

4

1 に答える 1

2

のみで明示ORDER BY的にソートしidます。WHEREクエリの一部でこれを回避する方法はありません。結果の順序を変更するには、 を使用しますORDER BY

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

無関係なメモ:$product_id_array信頼されていないユーザー入力が含まれている場合、ユーザーは'; DELETE FROM course; --そこに次のようなものを入れることができます。それを防ぐ方法については、パラメーター化されたクエリを読んでください。

于 2013-08-11T18:22:44.187 に答える