2011-07-30 2 views
1

以前はJOINを使用したことがないので、PHPを使用してMySQLクエリを正しく作成する方法に問題があります。MySQL JOINの適切な使用

私はという名前のテーブルをitemid、pricesなどの行に持っています。また、id、属性などの行を持つitem_listというテーブルがあります。

私は 'store' itemid'sにアクセスし、それらを使用して、item_listのIDとそのIDの属性にアクセスしたいと考えています。

$query = "SELECT store.price, item_list.* 
      FROM store, item_list 
      WHERE item_list.id = store.itemid"; 

クエリを実行しようとするとエラーが発生します。助言がありますか?

+0

わかりやすく、簡単にお手伝いします。面白いことに、質問を編集することはできますが、具体的なエラーについては言及していません。 –

+0

申し訳ありません。これはMYSQLエラーではありませんが、クエリは実行されません。 if文を使用します:if(!$ result = $ mysqli-> conn($ query)){return $ error; } – Alper

答えて

2
$query = "SELECT store.price, item_list.* 
      FROM store LEFT JOIN item_list ON item_list.id = store.itemid 

また、あなたはあなたではなく*よりも、選択された列について、明示的であるべきを持って

WHERE item_list.id = store.itemid 

でなければなりません。これは安全性と性能のためです。その後、あなたはINNER JOINを使用したい

$query = "SELECT s.price, il.col1, il.col2, il.col3 
      FROM store s LEFT JOIN item_list il ON s.itemid = il.id 
+0

ありがとう!コードが機能しました。私はテーブルエイリアスの使用を取り入れようとします。 – Alper

0

あなたはタイプミスです。それはあなたが

WHERE item.id = 
+0

ええと、どのようなタイプミスですか? –

+0

WHERE句の "item"は有効なテーブルではありません。彼らは "store"と "item_list"です – Jaxedin

+0

キャッチをありがとう! :D – Alper

0

すると、あなたがNULL値の両方のテーブルのすべての行を除外しZOワンツ場合:

もう1つの優れた機能は、あなたのSQL少し冗長にする表の別名です。 LEFT JOINは、結合の左側にNULL値を持つ行のみを除外します。

$query = "SELECT store.price, item_list.* 
     FROM store INNER JOIN item_list ON item_list.id = store.itemid