2013-03-29 146 views
3

我有兩個表:如何在SQL查詢中使用SQL查詢

  1. 表類別(CAT_ID,類別)
  2. 表category_details(CAT_ID,ID,...)

我有SQL代碼像波紋管:

$sql=mysql_query("select * from category"); 
while($rows=mysql_fetch_array($sql)){ 
$id_count=$rows['cat_id'];  

$sql1=mysql_query("select * from category_details where cat_id='$id_count'"); 
$count=mysql_num_rows($sql1); 

} 

我可以這樣使用嗎?

+0

你在做什麼? – Neo

+1

「我可以這樣使用」...是的 –

+0

如何?你能告訴我嗎? – Bee

回答

3

使用JOIN

SELECT * FROM category LEFT JOIN 
    category_details ON category_details.cat_id = category.cat_id; 

上面的查詢將返回所有的category和相關category detail

OP評論響應

SELECT c.name, 
      IFNULL(sub_c.total, 0) num 
FROM  category c 
LEFT JOIN (SELECT COUNT(*) total, cat_id 
      FROM  category_details 
      GROUP BY cat_id 
     ) sub_c ON (sub_c.cat_id = c.cat_id); 

完整代碼

<?php 
    $query = "SELECT c.name, 
       IFNULL(sub_c.total, 0) num 
      FROM  products_category c 
       LEFT JOIN (SELECT COUNT(*) total, cat_id 
        FROM  product 
        GROUP BY cat_id 
       ) sub_c ON (sub_c.cat_id = c.id)"; 

    $result = mysql_query($query)or die(mysql_error()); 

    echo "<table><tr><td>NameCount</td></tr>"; 
    while($row = mysql_fetch_assoc($result)) 
    { 
     echo "<tr><td>".$row['name']."(".$row['num'].")"."</td></tr>"; 
    } 
    echo "</table>"; 
?> 

MySQL表

產品分類表

CREATE TABLE IF NOT EXISTS `products_category` (
    `id` int(11) NOT NULL, 
    `name` varchar(200) COLLATE utf8_unicode_ci NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

-- 
-- Dumping data for table `products_category` 
-- 

INSERT INTO `products_category` (`id`, `name`) VALUES 
(1, 'Erasmus'), 
(2, 'Preston'), 
(3, 'Ulric'), 
(4, 'Gray'), 
(5, 'Joseph'), 
(6, 'Merrill'), 
(7, 'Alan'), 
(8, 'Jeremy'), 
(9, 'Solomon'), 
(10, 'Andrew'), 
(11, 'Galvin'), 
(12, 'Craig'), 
(13, 'Cameron'), 
(14, 'Omar'), 
(15, 'Addison'); 

產品表

CREATE TABLE IF NOT EXISTS `product` (
    `id` int(11) NOT NULL, 
    `name` varchar(200) COLLATE utf8_unicode_ci NOT NULL, 
    `cat_id` int(11) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

-- 
-- Dumping data for table `product` 
-- 

INSERT INTO `product` (`id`, `name`, `cat_id`) VALUES 
(1, 'Wesley', 1), 
(2, 'Graiden', 2), 
(3, 'Cruz', 5), 
(4, 'Hayden', 5), 
(5, 'Kennedy', 6), 
(6, 'Uriah', 8), 
(7, 'Alan', 8), 
(8, 'Cade', 1), 
(9, 'Ryan', 5), 
(10, 'Brody', 7); 

上面會輸出

Erasmus(2) 
Preston(1) 
Ulric(0) 
Gray(0) 
Joseph(3) 
Merrill(1) 
Alan(1) 
Jeremy(2) 
Solomon(0) 
Andrew(0) 
Galvin(0) 
Craig(0) 
Cameron(0) 
Omar(0) 
Addison(0) 
+0

我想要這樣展示:例如,我有2個表格類別賓館,賓館的記錄,然後在每個記錄中有很多記錄,我想選擇所有類別記錄並計算每個樣子中有多少個子記錄(酒店( 15),賓館(9)) – Bee

+0

@ user1116954所以你可以使用子查詢並將其添加到它 –

+0

你可以告訴我如何使用子查詢嗎? – Bee

1

您是否希望使用COUNTGROUP BY

select c.cat_id, c.cat_name, count(cd.*) 
from category c 
    left join category_details cd 
     on c.cat_id = cd.cat_id 
group by c.cat_id, c.cat_name 

這將返回每個類別與其關聯的category_details的計數。使用LEFT JOIN將返回所有類別 - 如果只需要那些具有詳細信息的用戶,則替換爲INNER JOIN