共同質問声明を求める

WBOY
リリース: 2016-06-23 14:19:38
オリジナル
1389 人が閲覧しました



上のデータテーブルに示されているように
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}
ログイン後にコピー


出力結果は次のようになります:

id bid(& b.content) content
------------------ ---------- --------
1 1, BBBBBBB
1 5, BBBBBBB AAAAAA
1 2, BBBBBBB AAAAAAAAA
2 2, BBBBBBB AAAAAAAAA
2 4, BBBBBBB AAAAAA

もしこの結果を実現したい場合は、プログラムを使用してください。実装は非常に簡単です。上記の 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 は別のより効率的な記述方法を使用しましたが、私の方法でも実際には同じ結果が得られます。

select * from `a`,`b` where `a`.`bid` like concat('%',`b`.`bid`,'%') ID で並べ替えます



関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート