2016-09-08 7 views
1

私は2つのテーブルを持っています。 id_product、price、unity、およびreferenceを含む私の最初のテーブルps_product。私は、名前と呼ばれる列を含む別のテーブルps_product_langに参加しようとしています。JOINが機能しないのはなぜですか?

try { 
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $stmt = $conn->prepare("SELECT id_product, price, unity, reference FROM ps_product JOIN ps_product_lang ON ps_product.id_product WHERE ps_product_lang.id_product = id_product"); 
    $stmt->execute(); 
    $product = $stmt->fetchAll(); 

    echo '<div class="table-responsive">'; 
     echo '<table class="table table-striped">'; 
      echo '<th>Checkbox</th><th>Product ID</th><th>Product Name</th><th>Price</th><th>Unit</th><th>Reference</th>'; 
       foreach ($product as $row) { 
        print '<tr>'; 
         print '<td><input type="checkbox" name="'. $row["id_product"] .'" value="'. $row["id_product"] .'"></td>'; 
         print '<td>'. $row["id_product"] .'</td>'; 
         print '<td>'. $row["name"] .'</td>'; 
         print '<td>'. $row["price"] .'</td>'; 
         print '<td>'. $row["unity"] .'</td>'; 
         print '<td>'. $row["reference"] .'</td>'; 
        print '</tr>'; 
       } 
     echo '</table>'; 
    echo '</div>'; 
} 

catch(PDOException $e) { 
    echo "Error: " . $e->getMessage(); 
} 

$conn = null; 

はなぜ何に等しい$行[「名前」]は、なぜ私が取得しています:私はまた、以下の私のコードを提供してきた

Error: SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id_product' in field list is ambiguous 

私は、次のエラーを取得していますエラーが表示されますか?

+2

2つ以上のテーブルに同じ名前のカラムがあり、あなたが話している通りにはうまくいかないことがあります。それぞれのテーブルをエイリアスし、関連するテーブルエイリアスとともにpreprendカラムを使用します。 –

+0

特にid_productは両方のテーブルにあるように見えますが、selectではエイリアス化されず、joinではエイリアス化されません。エンジンではどちらを選択するかわからない、両方のテーブルに存在する選択項目に他の列がある可能性があります。 – xQbert

+0

あなたの参加にも重要な部分がありません – AsheraH

答えて

2

あなたは結合クエリでON句を見逃しています。 ps_productのエイリアスもフィールド名id_productの前に存在しませんでした。以下のクエリを確認してください。また、別のフィールドがこれらの2つのテーブル間で共通である場合、エイリアスも必要になります。

$stmt = $conn->prepare("SELECT ps_product.id_product as id_product,name, price, unity, reference FROM ps_product JOIN ps_product_lang ON ps_product_lang.id_product = ps_product.id_product"); 
+0

これはテーブルを作成しましたが、$ row ["name"]はまだ空白ですか? –

+0

@ user6618037名前を選択していないようですか? –

+0

それでは、テーブルに参加したので、どのようにしてps_product_langから列名を選択するのですか? –

0

次の2つのテーブル間の結合を行っている、そしてこのオブジェクトが参加すると、同じ名前を気遣う2列あるので、SQLは、それはあなたに戻るべき1列知りません。あなたは彼がACOUNTに取るべき1知っているSQLエンジンを支援するために、テーブルの上にエイリアスを使用することができます

SELECT PRD.id_product, 
     price, 
     unity, 
     reference 
FROM ps_product PRD 
JOIN ps_product_lang PRL ON PRD.id_product = PRL.id_product 

今、SQLを使用すると、テーブルps_productの列id_productとされていない他の列(不明瞭)を選択することを知っています同じ名前をつけた

関連する問題