Помощь в запросе MYSQL с использованием PHP для создания меню навигации по архиву блога - PullRequest
1 голос
/ 14 января 2010

Я создаю меню навигации по архиву блога. В настоящее время я запускаю запрос, чтобы получить все годы и месяцы. Затем я перебираю и запускаю следующий запрос, чтобы получить все идентификаторы и заголовки блога за тот же год / месяцы:

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

После этого, чтобы подсчитать количество сообщений за этот месяц, я выполняю очень похожий запрос:

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

Год и месяц, конечно, динамичны.

Есть ли способ избежать выполнения двух отдельных запросов?

Спасибо заранее!

Ответы [ 4 ]

1 голос
/ 14 января 2010

Что не так с:

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: Забыли добавить пункт GROUP BY

РЕДАКТИРОВАТЬ 2: Забудь выше. Это было явно не правильно. Это сработает, хотя и не очень элегантно:

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

Так что, возможно, предложенный mysql_num_rows () не так уж и плох. :)

0 голосов
/ 14 января 2010

Вы можете сделать это используя php count (); Если ваш БД реализует эти методы:

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

будет легко узнать, сколько всего предметов

0 голосов
/ 14 января 2010

Разве вы не можете сделать все это одним выстрелом?!


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

0 голосов
/ 14 января 2010

Вы можете посчитать строки через php после отправки первого запроса (http://php.net/manual/en/function.mysql-num-rows.php)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...