0

MySQL テーブルからリクエストがあります。以下のようになります。

SELECT s . * , if( v.ip IS NULL , 0, 1 ) AS voted, v.vote
FROM `emvc4_records` s
LEFT JOIN `emvc4_records_votes` v ON ( s.id = v.record_id
AND v.day = CURRENT_DATE
AND v.ip = '2130706433' )
WHERE 1 =1
AND `category` =2
AND `caption` LIKE '%My%'
OR `description` LIKE '%My%'
ORDER BY `rating` DESC
LIMIT 0 , 25

私はこの結果を得ます:

id  category    category_name   caption                 description         created                 postby  votes_up    votes_down  rating  status  have_voted  vote
5   1                           My second idea          My second idea      2013-06-04 00:00:00     102     2           0           2       0       0           NULL
7   2                           My first question       My first question   2013-06-04 00:00:00     102     2           0           2       0       0           NULL
9   2                           My second               My second question  2013-06-04 00:00:00     102     1           0           1       0       0           NULL

私の質問: 私の sql クエリには、「AND category= 2」があります。では、出力にレコード id=5 (カテゴリ= 1 がある) が表示されるのはなぜですか?

ありがとう!

4

2 に答える 2

1

句の条件WHEREが適切に整理されていません。括弧を追加して、必要な条件をグループ化します。LIKE '%My%'グループ化するべきだと思います。

SELECT s . *
    , if( v.ip IS NULL , 0, 1 ) AS voted
    , v.vote
    FROM `emvc4_records` s
    LEFT JOIN `emvc4_records_votes` v ON ( s.id = v.record_id
        AND v.day = CURRENT_DATE
        AND v.ip = '2130706433' )
    WHERE 1 = 1
        AND `category` = 2
        AND (`caption` LIKE '%My%' OR `description` LIKE '%My%')
    ORDER BY `rating` DESC
    LIMIT 0 , 25

を追加した理由はわかりません1 = 1が、削除できます。

于 2013-06-11T05:53:22.713 に答える
0

クエリは次のようになります。

...............
`category` =2
AND (`caption` LIKE '%My%' OR `description` LIKE '%My%')
.................
于 2013-06-11T06:16:48.713 に答える