2

テキスト フィールド内の catid 番号に対して mysql 検索 (php 内) を実行しようとしています。現在 LIKE を使用していますが、より具体的にする必要があります。これが私のコードです:

SELECT * FROM articlepix 
WHERE published = 1 AND catid LIKE '%86%' 
ORDER BY RAND() LIMIT 1

^^ catid フィールド内で 86 番を探しているのですが、86 だけを探したいのですが、現在 186 番のデータも引き出しています。

上記の例では、catid が「91,107,36,139,146,168,186」であるフィールドを取得しています。

%86% を含むすべてを検索するのではなく、'86' だけを検索することはできますか? それが理にかなっている場合は?

4

1 に答える 1

4

MySQL は、 function を使用して、この巨大なデータベース設計エラーを回避するのに役立ちますFIND_IN_SET。これを試してください:

SELECT * FROM articlepix 
WHERE published = 1 AND FIND_IN_SET('86', catid) > 0
ORDER BY RAND() LIMIT 1

もちろん、これは次のように単純化できます。

WHERE published = 1 AND FIND_IN_SET('86', catid)

関数は一致がない場合にのみ返されます0が、それが何をするのか理解するのが難しいかもしれません:)

于 2012-04-16T04:08:02.333 に答える