上のデータテーブルに示されているように
A のデータを読み取るには? (Bの対応するデータも読み出します)
select * from `a`,`b` where `a`.`bid` like concat('%',`b ` .`bid`,'%')
ID が 1 に等しいテーブル a に対応する関連データを確認したい場合は、
select * from `a` ,`b` where `a`.` と書くことができます。 id`='1' および `a`.`bid` like concat('%',`b`.`bid`,'%')
はテーブル a をチェックすることであり、結果は次のようになります:
Object{ [id] => 1 [bid] => Object { [1] => Object { id => 1 content => 'BBBBB' } [2] => Object { id => 5 content => 'BBBBB' } [3] => Object { id => 2 content => 'BBBBB' } } conent => 'AAAAA'}
同様の PHP 疑似コードは次のようになります:
foreach ($tablea->result as $a){ echo $a->id foreach ($a->bid as $b) { echo $b.id; echo $b.content; } echo $a.conent}
もしこの結果を実現したい場合は、プログラムを使用してください。実装は非常に簡単です。上記の SQL は実際に関数を実現する必要があります
select * from `a` ,`b` where `a`.`bid` like concat('% ',`b`.`bid` ,'%')
1 に等しいテーブル ID に対応する関連データを確認したい場合は、次のように記述できます
select * from `a` ,`b` where `a` .`id`='1' および `a`. concat('%',`b`.`bid`,'%') のような `bid`
これは最初にテーブル b の ID を読み取り、次にファジーです。テーブル a の入札をクエリしますか?
select * from `a` ,`b` where `a`.`bid` like concat('%',`b`.`bid`,'%')
まず、テーブル AB を関連付けてから、テーブル a の入札がテーブル a の入札に含まれるかどうかをファジー クエリします
これは、元の入札カンマの代わりにテーブル b
の ID の昇順に従ってソートされますテーブル a の文字 文字列の順序: 1、5、2?? 1-5-2 の順序である必要があります
表に挿入....; ステートメント
select a.id, b.id as bid, a.content, b.content as bcontent from A表 a, B表 b where find_in_set(b.id, a.bid) order by a.id
select a.id, b.id as bid, a.content, b.content as bcontent from A表 a, B表 b where find_in_set(b.id, a.bid) order by a.id
モデレーターありがとうございます!
find_in_set(b.id, a.bid) は最初のアイテムのみをクエリできるようです。たとえば、上記のデータテーブルでは、a.bid は 1、5、2 であり、結果は b のアイテムのみを表示します。 .id=1! b.id=5 と b.id=2 のアイテムが見つかりませんでした。
テーブル B に冗長フィールド A_id を追加すると便利です。
CREATE TEMPORARY TABLE a (id int, bid varchar(10), content varchar(10));INSERT INTO a VALUES('1','1,5,2','AAAAAAA');INSERT INTO a VALUES('2','2,4','AAAAAAA');INSERT INTO a VALUES('3','1,3,2','AAAAAAA');CREATE TEMPORARY TABLE b (bid int, content varchar(10));INSERT INTO b VALUES('1','BBBBB');INSERT INTO b VALUES('2','BBBBB');INSERT INTO b VALUES('3','BBBBB');INSERT INTO b VALUES('4','BBBBB');INSERT INTO b VALUES('5','BBBBB');select a.id, b.bid as bid, a.content, b.content as bcontent from a, b where find_in_set(b.bid, a.bid) order by a.id
私の「1、5、2」のカンマの後にスペースがあることが分かりました!すべてを調べる方法はありません。スペースを削除するだけでOKです
なお、このfind_in_setのクエリ結果は、本来の1-5-2の順番に並べることはできません! 1-2-5の昇順か5-2-1の降順でしか並べられないのでしょうか?
Boss Nagging は別のより効率的な記述方法を使用しましたが、私の方法でも実際には同じ結果が得られます。