2012-05-11 3 views
2

몇 가지 데이터 샘플이있는이 두 테이블이 있습니다. 나는 각 카테고리에서 분류 광고 수를 끌어 내고 싶다. 나는 그것을 시험해 보았고, 나는 (2) 각각의 것이 정확하지 않다. 그래서 누군가가 이것으로 나를 도울 것입니다. 여기카운트 기능()

CREATE TABLE IF NOT EXISTS `categories` (
    `id` int(255) NOT NULL AUTO_INCREMENT, 
    `name` text COLLATE utf8_unicode_ci NOT NULL, 
    `subcategory_id` int(2) NOT NULL DEFAULT '0', 
    `parent_id` int(255) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=27 ; 

-- 
-- Dumping data for table `categories` 
-- 

INSERT INTO `categories` (`id`, `name`, `subcategory_id`, `parent_id`) VALUES 
(1, 'Announcements', 0, 0), 
(2, 'Employment', 0, 0), 
(3, 'Items For Sale', 0, 0), 
(4, 'Services', 0, 0), 
(5, 'Garage Sales', 0, 0), 
(6, 'Automobiles', 0, 0), 
(7, 'Announcement1', 1, 1), 
(8, 'Announcement2', 1, 1), 

-- 
-- Table structure for table `classifieds` 
-- 

CREATE TABLE IF NOT EXISTS `classifieds` (
    `classified_id` int(255) NOT NULL AUTO_INCREMENT, 
    `title` text COLLATE utf8_unicode_ci NOT NULL, 
    `description` text COLLATE utf8_unicode_ci NOT NULL, 
    `category_id` int(10) NOT NULL, 
    `name` text COLLATE utf8_unicode_ci NOT NULL, 
    `authorized` int(10) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`adid`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=177 ; 

-- 
-- Dumping data for table `classifieds` 
-- 

INSERT INTO `classifieds` (`classified_id`, `title`, `description`, `category_id`, `name`, `authorized`) VALUES 
(1, 'Test Classified', 'Here is the First Test classified listing.', 1, 1); 

INSERT INTO `classifieds` (`classified_id`, `title`, `description`, `category_id`, `name`, `authorized`) VALUES 
(2, 'GMC For Sell', 'Looks like new 1979 GMC.', 6, 1); 

$query = "SELECT category_id, COUNT(title) FROM classifieds GROUP BY category_id"; 
$result = mysql_query($query) or die(mysql_error()); 
$row = mysql_fetch_array($result) 
$num_items_in_category = $row['COUNT(title)']; 
echo "<><a href='category-".$row['id'].".php' >".$row['name'].$num_items_in_category."</a></li>"; 

감사

+1

먼저 'COUNT (제목)'에 별칭을 지정해야합니다. 둘째 :'$ row [ 'id']'와'$ row [ 'name']'은 어디에서 오는 것입니까? –

+0

나는 이런 식으로 시도했다. $ query = "SELECT category_id, COUNT (제목)은 'total'로 분류 됨 GROUP BY category_id"; 운이 없다. – Rocks

+2

부수적으로 : 'INSERT INTO classifieds'명령문에 일치하는 매개 변수 수가 없다.'name'이 누락 된 것처럼 보인다. – Kaivosukeltaja

답변

2

변경 결과를 통해 SQL 조금, 및 루프? 경우 다른 사람이 혜택을 원하는 단지에

$query = "SELECT c.id, c.name, 
       COUNT(cl.category_id) AS num_items_in_category 
       FROM category_id c 
       LEFT JOIN aclassifieds cl ON cl.category_id=c.id 
       GROUP BY c.id"; 
$result = mysql_query($query) or die(mysql_error()); 

while ($row = mysql_fetch_array($result)) { 
    echo "<li><a href='category-".$row['id'].".php' >".$row['name'].$row['num_items_in_category']."</."</a></li>"; 
} 
+0

도움을 주셔서 감사하지만 category_id 또는 aclassifieds라는 테이블이 없습니다. – Rocks

+0

'category_id'를'categories'로'aclassifieds'를'classifieds'으로 변경하면 어떨까요? –

+1

조금 바뀌었고 완벽하게 작동했습니다. 여러분 모두에게 감사합니다. – Rocks

0

내이 :

enter $query = "SELECT c.id, c.name, 
      COUNT(cl.title) AS num_items_in_category 
      FROM categories c 
      LEFT JOIN classifieds cl ON cl.category_id=c.id 
      GROUP BY c.id"; 
    $result = mysql_query($query) or die(mysql_error()); 

동안 ($ 행 =로 MYSQL_ASSOC ($ 결과)) { 에코 "

  • "$ 행 [ '이름']. . $ row [ 'num_items_in_category']. "
  • "; } 여기 감사합니다.