0

条件が真の行を選択したい。という名前の列がcommandあり、列の値に (私が) 定義された文字列が含まれている場合は、結果に追加します。

私の問題は行を選択することです。クエリは WHERE ステートメントを認識しないため、列に文字列commandが含まれている場合はすべてのデータを選択します。

SELECT * 
FROM `admin_log` 
WHERE `admin_log`.`user` = 'Admin' 
    AND command LIKE '%aznot%' 
    OR command LIKE '%hango%' 
ORDER BY `order_id` DESC 
LIMIT 0, 50

たとえば、Admin、Zuppa、Grund の 3 つの管理者アカウントがあります。コマンド列にaznotまたはhangoが含まれている場合、アカウントADMINですべてのデータを選択したい。

私は何を間違っていますか?

4

6 に答える 6

2

括弧が必要です。

SELECT * 
FROM `admin_log`
WHERE `admin_log`.`user` = 'Admin'  
AND (command LIKE '%aznot%' OR command LIKE '%hango%')
ORDER BY `order_id` 
DESC LIMIT 0, 50
于 2012-06-13T12:50:27.817 に答える
1
SELECT * FROM `admin_log` WHERE `admin_log`.`user` = 'Admin' 
 AND (command LIKE '%aznot%' OR command LIKE '%hango%') 
 ORDER BY `order_id` DESC LIMIT 0, 50
于 2012-06-13T12:50:35.597 に答える
1

次のようなものを試してください。

SELECT * FROM `admin_log` WHERE `admin_log`.`user` = 'Admin' AND (command LIKE '%aznot%' OR command LIKE '%hango%') ORDER BY `order_id` DESC LIMIT 0, 50
于 2012-06-13T12:50:42.510 に答える
1

エンジンによる誤解を防ぐために、ORステートメントを別の式に分割することをお勧めします。

SELECT * FROM `admin_log` WHERE `admin_log`.`user` = 'Admin' AND (command LIKE '%aznot%' OR command LIKE '%hango%') ORDER BY `order_id` DESC LIMIT 0, 50
于 2012-06-13T12:51:07.500 に答える
1
SELECT * 
FROM   `admin_log` 
WHERE  `admin_log`.`user` = 'Admin' 
       AND (command LIKE '%aznot%'
        OR command LIKE '%hango%' )
ORDER  BY `order_id` DESC 
LIMIT  0, 50 
于 2012-06-13T12:51:27.647 に答える
1

条件を適切にネストする必要があります。SQLの論理演算子の優先順位規則を参照してください

于 2012-06-13T12:51:31.400 に答える