1

誰かがここで私を助けてくれることを願っています。私のデータベースには次のような構造があります。

id   nav      title   content                      date
1    2,3      nav a   askdajsdjasdasdfajsdfasd     12 june, 2012
2    2,40     nav e   askdajsdjasdasdfajsdfasd     12 june, 2012
3    12,3,14  nav b   askdajsdjasdasdfajsdfasd     12 june, 2012
4    3,4      nav c   askdajsdjasdasdfajsdfasd     12 june, 2012

私の質問は、送信したナビゲーションIDに基づいてアイテムを表示するにはどうすればよいですか?たとえば、nav id 2を送信するときにすべてのアイテム(nav a、nav e)を表示したい場合はどうすればよいですか?

4

3 に答える 3

2
SELECT * FROM TABLE_NAME WHERE FIND_IN_SET(2,nav) 

また

SELECT *
FROM Table
WHERE nav LIKE '2,%'
OR nav LIKE '%,2'
OR nav LIKE '%,2,%'
OR nav = '2'

しかし、最初のものはかなり打者です。

于 2012-05-16T17:37:39.690 に答える
1

Xが目的のナビゲーションIDであるとすると、次のクエリを使用できます。

SELECT title FROM table WHERE nav REGEXP '([0-9]+,)*X(,[0-9]+)*';
于 2012-05-16T17:44:44.587 に答える
0

nav列の値の範囲が0〜9の場合、つまり、例に示されているような1桁の場合は、次を安全に使用できます。

select * from table where nav like '%2%'

9より大きい値、つまり10以降の値があり、データが2,5,10,123になる可能性がある場合は、ストアドプロシージャを作成し、クエリ値をパラメータとして渡す必要があります。次に、このSPはカーソルを作成し、結果セットをループし、文字列関数を使用して数値の存在を確認し、見つかった場合は結果として行を返します。

もう1つの方法は、PHP結果オブジェクトで結果を取得し、結果行をループして、パラメーター値の存在を確認することです。ただし、テーブルに複数の行がある場合は、SPの方法の方がはるかに優れて効率的です。

于 2012-05-16T17:31:58.470 に答える