Mysql
SQL:從兩個表中相對獲取行
我有兩個名為
categories
and的表products
。下面給出簡單的結構。類別
cat_id cat_name 1 c1 2 c2 3 c3
產品
prod_id cat_id prod_name 123 1 p1 546 2 p2 562 3 p3 567 3 p4 234 1 p5
我想獲取產品列表及其相關類別名稱。前任。
Category : c1, Product : p1 Category : c2, Product : p2 Category : c3, Product : p3 Category : c3, Product : p4 Category : c1, Product : p5
為此,我使用以下簡單查詢,
if($res1 = mysqli_query("SELECT cat_id, cat_name FROM categories")) { while($tbl1 = mysqli_fetch_assoc($res1)) { if($res2 = mysqli_query("SELECT prod_name FROM products WHERE cat_id = ".$tbl1['cat_id'])) { while($tbl2 = mysqli_fetch_assoc($res2)) { echo "Category :". $tbl1['cat_name'] . " Product". $tbl2['prod_name']; } } } }
它可以在單個查詢中得到改進,但對此一無所知。請幫忙。
還建議根據類別順序列出這些產品。(例如第一個 c1 類產品、c2 類產品等等……)
謝謝…
這是按照問題的方式訂購它的查詢
SELECT c.cat_name,p.prod_name FROM products p INNER JOIN category c ON p.cat_id = c.cat_id ORDER BY prod_name;
這是格式化的查詢
SELECT CONCAT('Category : ',c.cat_name,', Product ; ',p.prod_name) DisplayLine FROM products p INNER JOIN category c ON p.cat_id = c.cat_id ORDER BY prod_name;
如果你想按類別排序,那麼
SELECT c.cat_name,p.prod_name FROM products p INNER JOIN category c ON p.cat_id = c.cat_id ORDER BY cat_name,prod_name;
試一試 !!!