0

どの mysql コードを使用するかを考えてみました。必要なすべての検索機能を含む次のスクリプトを試しました。

SELECT * FROM `zk_posts` WHERE `form_id` IN (3,6) 
AND FROM_UNIXTIME(published, '%Y') = 2013 
AND `message` LIKE '%search%' 
OR `description` LIKE '%search%' 
OR `name` LIKE '%search%';

最初は、form_id が 3 または 6 で、発行年が 2013 年の投稿のみを表示したいと考えています。同時に、これら 3 つのうちの 1 つに一致するものがあれば、テキスト列内を検索したいのですが、OR を使用してAND との組み合わせは、私が望むようには機能しません。この mysql を実行すると、たとえば form_id と一致しない投稿が返されます。

誰かがこれをどのように解決するか教えてもらえますか.

4

3 に答える 3

2

このようにしてみてください...

SELECT * FROM `zk_posts` WHERE `form_id` IN (3,6) 
AND FROM_UNIXTIME(published, '%Y') = 2013 
AND (`message` LIKE '%search%' 
OR `description` LIKE '%search%' 
OR `name` LIKE '%search%');
于 2013-05-08T21:51:41.420 に答える
0

mysql がこれらの条件を評価する順序を強制するには、括弧が必要です。おそらく次のようなものです:

SELECT ...
WHERE (`form_id` in (3,6))
    AND (FROM_UNIXTIME(published, '%Y') = 2013)
    AND (
       message LIKE '%search%'
       OR description LIKE '%search%'
       OR name LIKE '%searc%'
    )

書かれているように、クエリは次のように扱われます

... WHERE (everything else)
    OR (message LIKE ...)
    OR (description LIKE ...)
    OR (name LIKE ...)

残りの条件に関係なく、検索語がこれら 3 つのフィールドのいずれかにある場合、TRUE と評価されます。

于 2013-05-08T21:51:08.497 に答える
0

これは、あなたの望むことですか?(条件を囲む括弧に注意してくださいOR)

 SELECT * FROM `zk_posts` 
WHERE `form_id` IN (3,6) AND FROM_UNIXTIME(published, '%Y') = 2013 AND 
(`message` LIKE '%search%' OR `description` LIKE '%search%' OR `name` LIKE '%search%');
于 2013-05-08T21:51:23.423 に答える