-1

PHP を使用して、MySQL データベースの 2 つのテーブルから出力をマージしようとしています。データを取得したい両方のテーブルから特定の列を取得するために SELECT 文字列を配置する方法がわかりません。

1 つのテーブルには一意の識別子 (入札) があり、この識別子は 2 番目のテーブルにも存在します。

最初の TABLE はチケット購入者を表します (テーブル名 = eventoslotickerbuyer)。そして、2 番目の TABLE はゲストを表します (テーブル名 = eventosloguests)。eventosloticketbuyer TABLEの構造は次のようになります。

bid
firstname
lastname
email
cellphone
privatekey
eventid
orderdatetime
confirmeddatetime

eventosloguestsテーブルの構造は次のとおりです。

gid
gfirstname
glastname
gemail
bid
eventid
registered
confirmed
confcode

私が達成したいのは、「最初の」テーブルから名と姓を取得し、「2 番目」のテーブルから gfirstnameglastname取得することです。両方のテーブルに存在する列は入札です。

クエリがどのように見えるべきか理解できないので、助けていただければ幸いです。

アンドレアス

アップデート:

次のようなクエリを作成して動作するようになりました。

SELECT a.firstname, a.lastname, b.gfirstname, b.glastname
FROM eventosloticketbuyer a
INNER JOIN eventosloguests b ON a.bid = b.bid

まだわからないのは、BUYER に GUEST が接続されていない場合、これは空白になるのでしょうか、それとも、GUEST をソースとして使用して BUYER をフェッチすることを保証するために何らかの方法で切り替える必要があるのでしょうか?

4

1 に答える 1

1

たとえば、同じを持つ両方のテーブルからすべてのレコードを選択する INNER JOIN を使用して、テーブルを結合する必要がありますbid

SELECT buyers.firstname, buyers.lastname, guests.gfirstname, guests.lastname
FROM
  buyers INNER JOIN guests
  ON buyers.bid = guests.bid

エイリアスを使用して上記のクエリを記述して、記述を短くすることもできます。

SELECT b.firstname, b.lastname, g.gfirstname, g.lastname
FROM
  buyers b INNER JOIN guests g
  ON b.bid = guests.bid

b は単なるバイヤーのエイリアスであり、g はゲストのエイリアスです。INNER JOIN を使用すると、guests テーブルの行と一致するレコードを持つ、buyers テーブルからすべての行を返すことができます。一致する行がさらにある場合、INNER JOIN はそれらすべての行の乗算を実行します。

入札したバイヤーがいて、その入札をしたゲストがいない場合は、返品されません。ただし、LEFT JOIN を使用できます。

SELECT b.firstname, b.lastname, g.gfirstname, g.lastname
FROM
  buyers b LEFT JOIN guests g
  ON b.bid = guests.bid

これにより、一致するすべての購入者とすべてのゲストが返されます。一致しない場合、ゲスト テーブルのすべての値は NULL になります。ゲストからすべての行を返し、一致する購入者のみを返す RIGHT JOIN を使用することもできます (または、購入者とゲストの順序を入れ替えることもできます)。

結合の詳細については、SQL 結合の視覚的な説明を参照してください。

于 2013-07-01T15:42:23.577 に答える