Bir blog arşiv navigasyon menüsü oluşturmak için PHP ile MYSQL sorgusu ile yardımcı

4 Cevap php

Ben bir blog arşiv navigasyon menüsü inşa ediyorum. Şu anda tüm yıl ve ay almak için bir sorgu çalıştırın. Sonra döngü ve tüm id ve o yılın başlıkları / ay blog mesajları almak için aşağıdaki sorguyu çalıştırın:

SELECT `id`, `title` 
FROM `news` 
WHERE YEAR(`date`) = "2010" AND MONTH(`date`) = "03" 
ORDER BY `date` DESC

Bundan sonra, o ay için mesajların miktarını saymak için çok benzer bir sorguyu çalıştırıyorum:

SELECT COUNT(*) as `count` 
FROM `news` 
WHERE YEAR(`date`) = "2010" AND MONTH(`date`) = "03"

Yıl ve ay tabii dinamiktir.

Is there any way to avoid having to run two separate queries?

Teşekkürler vaktinden!

4 Cevap

Sen ilk sorguyu gönderdikten sonra php aracılığıyla satırları sayabilirsiniz (http://php.net/manual/en/function.mysql-num-rows.php)

Ne nesi var:

SELECT `id`, `title`, count(*) AS `count` 
FROM `news` 
WHERE YEAR(`date`) = "2010" AND MONTH(`date`) = "03" 
GROUP BY ( `id` ) #assuming id is unique
ORDER BY `date` DESC

?

EDIT: Forgot to add GROUP BY clause

EDIT 2: Forget the above. That was obviously not correct. This will do the trick, though it may be concidered not very elegant:

SELECT
    `id`,
    `title`,
    ( SELECT
          count(*)
      FROM
          `news`
      WHERE
          YEAR(`date`) = "2010" AND 
          MONTH(`date`) = "01" ) as `count`
FROM
    `news` 
WHERE
    YEAR(`date`) = "2010" AND
    MONTH(`date`) = "01"
ORDER BY
    `date` DESC

Yani belki önerilen mysql_num_rows () o kadar da kötü değil. :)

You could do it using php count(); If your db Implements this methods :

echo count($this->db->fetch_array($q));

orada kaç öğe bilmek almak kolay olacak

Eğer tek seferde tüm bu yapamaz?!


SELECT COUNT(id) as count, MONTH(date) as month, YEAR(date) as year 
FROM news 
GROUP BY MONTH(date), YEAR(date)