SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 08.06.2014 00:38:39

serj011
Активист
Зарегистрирован: 22.04.2010
Сообщений: 234

запрос COUNT(*)

Помогите с запросом пожалуйста

есть вот такой запрос

$resultNote = mysql_query("SELECT
       `like_note`.
       `l_user_id`,
       `l_date`,
       `notes`.*,
       `users`.
       `nik`,
       `url`,
       `avatar`,
       `gender`,
       `bd_month`,
       `bd_day`,
       `bd_year`,
       `online`
FROM
           `like_note`,
       `notes`,
       `users`
WHERE
       (`like_note`.`l_user_id` IN ( SELECT `user_added` FROM `friends` WHERE `user` = '{$myrow_user['id']}' ) OR `like_note`.`l_user_id` = '10050')
AND
       `like_note`.`l_note_id` = `notes`.`id`
AND
       `like_note`.`l_user_id` = `users`.`id` GROUP BY `like_note`.`l_note_id` ORDER BY `like_note`.`l_date`"
, $db );


нужно через отдельный запрос COUNT(*) посчитать сколько строк в этом запросе.
я просто еще не сталкивался с запросом COUNT(*) в котором нужно подсчитать данные из трех таблиц да еще и с подзапросом

Неактивен

 

#2 08.06.2014 11:22:07

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: запрос COUNT(*)

вместо списка выбираемых полей пишите count(*) и получите правильный ответ.

далее запрос можно упростить: убрать сортировку и лишние джойны, т.е. те которые не изменяют кол-во строк в ответе.

Неактивен

 

#3 08.06.2014 20:19:50

serj011
Активист
Зарегистрирован: 22.04.2010
Сообщений: 234

Re: запрос COUNT(*)

я убрал все лишнее, вот этот вариант считает правильно

$note_all = mysql_query("SELECT
       `like_note`.
       `l_user_id`,
       `l_date`,
       `notes`.*
FROM
       `like_note`,
       `notes`
WHERE
       (`like_note`.`l_user_id` IN ( SELECT `user_added` FROM `friends` WHERE `user` = '{$myrow_user['id']}' ) OR `like_note`.`l_user_id` = '10050')
AND
       `like_note`.`l_note_id` = `notes`.`id` GROUP BY `like_note`.`l_note_id`"
, $db );

$note_all = mysql_fetch_array($note_all);
$note_all = $note_all[0];


а если вместо списка выбираемых полей пишу count(*) выводит 1
$note_all = mysql_query("SELECT
       COUNT(*)
FROM
       `like_note`,
       `notes`
WHERE
       (`like_note`.`l_user_id` IN ( SELECT `user_added` FROM `friends` WHERE `user` = '{$myrow_user['id']}' ) OR `like_note`.`l_user_id` = '10050')
AND
       `like_note`.`l_note_id` = `notes`.`id` GROUP BY `like_note`.`l_note_id`"
, $db );

$note_all = mysql_fetch_array($note_all);
$note_all = $note_all[0];

Неактивен

 

#4 08.06.2014 21:39:16

serj011
Активист
Зарегистрирован: 22.04.2010
Сообщений: 234

Re: запрос COUNT(*)

я ошибся, первый вариант не считает количество строк, а второй не работает

Неактивен

 

#5 08.06.2014 21:46:31

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: запрос COUNT(*)

Выполните второй запрос отдельно в mysql. Тогда будет видно, что группировка приводит к тому, что число строк считается для каждой группы. Первый запрос странный - группируете по `l_note_id`, а потом выбираете `l_user_id`. Из каждой группы будет выбираться по одному призвольному значению.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson