2012-04-16 12 views
2

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

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

が^^私はCATIDフィールド内の番号86を探していますが、私は現在、それがあまりにも数186でデータを引き出しています、それが唯一の86を探したいです。

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

%86%を含むすべてではなく、単に「86」だけで検索できますか?それが理にかなっていれば?

+1

http://stackoverflow.com/questions/2498309/comma-seperated-values-and-like-php-mysql-troubles http://stackoverflow.com/questions/6075418/mysql-like-limiting http: //stackoverflow.com/search?q=[mysql]+like+comma –

+1

"*私はそれが86 *のみを検索したい。もしそうなら、単に 'catid = '86' 'を使うのはなぜですか? – Lion

+1

@ライオン:誰かが正規化を行ったので。 –

答えて

4

MySQLは、関数FIND_IN_SETを使用してこの巨大なデータベース設計エラーを回避するお手伝いをします。これを試してみる:

に簡略化することができ、もちろんの
SELECT * FROM articlepix 
WHERE published = 1 AND FIND_IN_SET('86', catid) > 0 
ORDER BY RAND() LIMIT 1 

:一致しないとき、機能だけ0を返しますが、それが何をするか理解することは難しくなるかもしれませんが

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

: )

+1

あなたの助けを感謝します:) – SoulieBaby

+1

問題はありません!ようこそ :) –

関連する問題