0

ユーザーが顧客名を検索でき、その顧客の住所がすべて表示されるデータベースの検索フォームを作成しようとしています。私の構造はこのように見えます

顧客テーブル

  • ID
  • ファーストネーム
  • 苗字
  • 会社名

アドレステーブル

  • ID
  • ライン1
  • 郵便番号
  • 顧客ID

サイトテーブル

  • ID
  • Address_ID
  • ノート

最初、最後、または会社名のいずれかを入力として受け取り、これを変数として、検索する列とともに保存します。次に、次のクエリを使用して、データベースの一致基準を確認します。

$data = mysql_query("SELECT * FROM customer INNER JOIN address ON customer.ID = address.Customer_ID INNER JOIN sites ON address.ID = sites.address_ID WHERE upper(customer.$field) LIKE'%$query%'") ;/

を使用して結果を印刷します

    while($results = mysql_fetch_array($data)){
            echo "<br>"; 
            echo $results['First_Name']; 
            echo " "; 
            echo $results['Surname']; 
            echo $results['town']; 
            echo " "; 
            echo $results['postcode'];

この問題は、1人の顧客が複数の住所を持っている場合に発生します。異なる自宅の住所とサイトの住所。クエリは、アドレスの1つであるサイトアドレス(2番目に送信され、ホームアドレスを上書きしているように見える)のみを出力します。

アドレステーブルでは、これらのアドレスの両方に同じCustomer_IDが含まれていますが、1つだけではなく、両方を表示するにはどうすればよいですか?

4

2 に答える 2

0

検索クエリを使用して顧客を見つける必要がありますが、戻ってその特定の顧客のすべてのレコードを取得します。サブクエリとしてこれを行うと、次のようになります。

SELECT ...
FROM Customer
INNER JOIN address ON customer.ID = address.Customer_ID 
INNER JOIN sites ON address.ID = sites.address_ID 
WHERE Customer.ID IN (SELECT ID 
                      FROM customer 
                      INNER JOIN address ON customer.ID = address.Customer_ID 
                      INNER JOIN sites ON address.ID = sites.address_ID 
                      WHERE upper(customer.$field) LIKE'%$query%')
于 2012-07-30T04:12:16.043 に答える
0

SITES を接続するときは、LEFT OUTER JOIN を使用する必要があると思います。INNER JOIN を使用すると、Id が sites.address_id にない ADDRESS レコードが失われます。

于 2012-07-31T06:31:00.400 に答える