2012-04-30 11 views
0

私はPHPとMySQLの統合を行っています。MySQL + PHP - 以前の選択結果に基づいて情報を選択

<?php 
include_once("conf.php"); 

$sql = "SELECT Name,Address FROM customers"; 
$rs = mysqli_query($connect,$sql) or die("can't connect to DB"); 
$temp = mysqli_num_rows($rs); 


while($row = mysqli_fetch_array($rs)) 
{ 
    $convert = mb_convert_encoding ($row['Name'],"UTF-8","gbk"); 
    $print .= "<tr><td>".$convert."</td><td>".$row['Address']."</td><td>".$sql2."</td></tr>\n"; 
} 

このコードが動作しているが、今私はこの1つの結果(名前)に基づいて、別のテーブルから特定の情報を選択する必要があります。 次のコードは正常に動作しています。

だから、これは選択し他のMySQLのようになります。(顧客テーブルから)私の顧客の「名前」に基づいて

$sql2 = "select History from Delivery where Name="$convert"; 

を、私はで彼の「履歴」を取得する必要があります配送テーブル。

だから、私は彼が印刷されます:最高の解決策になる何名+住所+歴史

を?? @@@@@@@@@@

$sql = 'SELECT * FROM customers c 
      INNER JOIN Delivery d 
      ON c.Name = d.Name'; 

$result = mysqli_query($connect, $sql); 
$temp = mysqli_num_rows($rs); 


while($row = mysqli_fetch_array($result)) 
{ 
    $convert = mb_convert_encoding ($row['Name'],"UTF-8","gbk"); 
    $print .= "<tr><td>".$convert."</td><td>".$row['Address']."</td><td>".$row['History']."</td></tr>\n"; 
} 

を解決し@@@@@@@@@

私の現在の状況は次のとおりです。私は情報を取得する必要があり、そこから3つのテーブルを持っています。

テーブル:顧客、ユーザー、履歴。

お客様から、私は顧客が必要です。

配送から私には履歴が必要です(顧客の数に基づいて)。

ユーザーからは名前が必要です(実際はほとんどニックネームです)。

これらの3つのテーブルには「名前」列があり、列名を変更できないため、INNER JOIN文を使用してCUSTOMERSまたはDELIVERYではなくUSERSから名前を取得するにはどうすればよいですか?

答えて

1

一度あなたが必要なすべてのデータをつかむために最初のテーブルに参加してください:

$sql = 'SELECT * FROM customers c 
      INNER JOIN Delivery d 
      ON c.Name = d.Name'; 

$result = mysqli_query($connect, $sql); 

while($row = mysqli_fetch_array($result)) 
{ 
    echo $row['History'] . ' ' . $row['Name']; 
} 

これは、2番目のクエリを必要とするからあなたを節約できます。

+0

私はそれを得ません... どうすればそれを印刷できますか? – Darkeden

+0

@Darkeden - より完全な例を追加しました – nickb

+0

もう一度私の質問を読んでください、私もそれを更新しました。 – Darkeden

1

名前でこれらの2つのテーブルを使ってINNER JOINを実行したいと思うように聞こえますか?

+0

Dweiss、私の質問を更新しました。それを確認してください。 – Darkeden

1

Darkedenでは、SELECT customers.nameを 'CName'などとすることができます。このような別名を使用すると、後でecho $ row ['CName']を実行できます。

+0

お客様。* = customers.Name ?? Like:SELECT * FROM customers c INNER JOIN配達d ON users.Nameは 'c.Name' =ユーザー名は 'd'です。名''; – Darkeden

+0

*(各テーブルのすべての列)を選択する代わりに、得意先。*を選択して、得意先テーブルから各列を選択することができます。その場合、「名前」は顧客の名前になります。使用している列のみを選択することができます。 select文で列を使用していなくても、where句で列を使用することはできます。 – dweiss

+0

'SELECTユーザー。* FROM customers c INNER JOIN配信先 ON c.Name = d.Name INNER JOINユーザーe ON d.Name = e.Name'; – Darkeden

関連する問題