私はmysqlに非常に慣れていないので、かなり複雑なクエリがあり、短縮または最適化できると確信しています。
site = '{$site}'
毎回条件を繰り返さない方法はありますか?
または、ケースバイケースで結果を注文するときに最初の条件を繰り返さないのですか?
このクエリはそれほど多くの単語で書き直すことはできませんか?
SELECT * FROM {$table} WHERE
(site = '{$site}' AND (id LIKE '%bwm%' OR id LIKE '%merc%'))
OR
(site = '{$site}' AND (desc1 LIKE '%new%' OR desc2 LIKE '%smok%'))
ORDER BY CASE
WHEN (site = '{$site}' AND (id LIKE '%bwm%' OR id LIKE '%merc%')) THEN 1
ELSE 2 END
LIMIT 50
これを試して:
SELECT *
FROM {$table}
WHERE
site = '{$site}'
AND (
id LIKE '%bwm%' OR id LIKE '%merc%'
OR desc1 LIKE '%new%' OR desc2 LIKE '%smok%'
)
ORDER BY
CASE WHEN (id LIKE '%bwm%' OR id LIKE '%merc%') THEN 1
ELSE 2
END
LIMIT 50
site = '{$site}'
order by
句WHERE
は条件を満たさない行を除外するため、句では必須ではありません。site = '{$site}
つまり、選択されたすべての行はこのサイトからのものです{$site}
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加