Mysql

SQL:從兩個表中相對獲取行

  • October 9, 2014

我有兩個名為categoriesand的表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;

試一試 !!!

引用自:https://dba.stackexchange.com/questions/78793