SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 13.09.2012 00:13:53

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

запрос на подсчет количества SELECT COUNT(*)

Привет всем!
Есть рабочий запрос, который вытягивает нужные данные из таблицы

$result5 = mysql_query("SELECT anketa.*, foto_user. activ, users.avatar, bd_day, bd_month, bd_year, visiting_m, visiting_d, visiting_y, visiting_time, nik, city, online, (YEAR(CURDATE()) - YEAR(DATE(CONCAT(`bd_year`, '-', `bd_month`, '-', `bd_day`))) - IF(RIGHT(CURDATE(), 5) < RIGHT(DATE(CONCAT(`bd_year`, '-', `bd_month`, '-', `bd_day`)), 5), 1, 0)) AS `age` FROM anketa, foto_user, users WHERE users.del_ank = '0' and users.id = anketa.id_user and ($lf_S) $city_S $albom_foto $online_user GROUP BY anketa.id HAVING `age` >= $af AND `age` <= $at ORDER BY id DESC LIMIT $start, $num",$db);

выше этого запроса есть код, который должен посчитать количество того, что вытаскивает этот запрос через mysql_query("SELECT COUNT(*)...., только я не знаю как его правильно написать.

у меня был похожий, но только из двух таблиц))) не могу слепить из трех)
$result00=mysql_query("SELECT COUNT(*) FROM anketa INNER JOIN users ON anketa.id_user=users.id WHERE ($lf_S) and ($city_S) and ($age_S) $albom_foto $online_user",$db);



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

Неактивен

 

#2 14.09.2012 09:10:09

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

Re: запрос на подсчет количества SELECT COUNT(*)

и тишина... неужели никто ничего подсказать не может?

Неактивен

 

#3 16.09.2012 19:21:45

maximus_wand
Участник
Откуда: Мурманск
Зарегистрирован: 16.09.2012
Сообщений: 13

Re: запрос на подсчет количества SELECT COUNT(*)

Не удобно у тебя написано. C "Syntax"-ом симпатичнее будет.


SELECT anketa.*, foto_user. activ, users.avatar, bd_day, bd_month, bd_year, visiting_m, visiting_d, visiting_y, visiting_time, nik, city, online,
(YEAR(CURDATE()) - YEAR(DATE(CONCAT(`bd_year`, '-', `bd_month`, '-', `bd_day`))) - IF(RIGHT(CURDATE(), 5) < RIGHT(DATE(CONCAT(`bd_year`, '-', `bd_month`, '-', `bd_day`)), 5), 1, 0)) AS `age`
FROM anketa, foto_user, users
WHERE users.del_ank = '0' and users.id = anketa.id_user and ($lf_S) $city_S $albom_foto $online_user
GROUP BY anketa.id
HAVING `age` >= $af AND `age` <= $at
ORDER BY id DESC
LIMIT $start, $num;
 

Не совсем понял, чего ты хочешь. Но чтобы посчитать кол-во строк, которые вернёт запрос вместо всех полей на запрос пишут count(1). Но из-за "GROUP BY" он вернёт кол-во строк в группах.
Зато в PHP есть функция mysql_num_rows - она возвращает кол-во строк, которые вернул запрос.
Чтобы посчитать кол-во строк, наверно, нужно сделать запрос и определить кол-во строк через mysql_num_rows. Но чтобы это заняло меньше ресурсов, нужно выкинуть из-запроса всё лишнее и оставить одно любое поле.
- посколку у тебя "GROUP BY anketa.id" - то поле anketa.id нужно оставить в запросе.
- из-за Having-a нужно оставить:
(YEAR(CURDATE()) - YEAR(DATE(CONCAT(`bd_year`, '-', `bd_month`, '-', `bd_day`))) - IF(RIGHT(CURDATE(), 5) < RIGHT(DATE(CONCAT(`bd_year`, '-', `bd_month`, '-', `bd_day`)), 5), 1, 0)) AS `age`
- наверно, можно убрать "ORDER BY id DESC", а DESC добавить в GROUP получиться:
GROUP BY anketa.id DESC

В твоём случае будет.

SELECT
anketa.id,
(YEAR(CURDATE()) - YEAR(DATE(CONCAT(`bd_year`, '-', `bd_month`, '-', `bd_day`))) - IF(RIGHT(CURDATE(), 5) < RIGHT(DATE(CONCAT(`bd_year`, '-', `bd_month`, '-', `bd_day`)), 5), 1, 0)) AS `age`
FROM anketa, foto_user, users
WHERE users.del_ank = '0' and users.id = anketa.id_user and ($lf_S) $city_S $albom_foto $online_user
GROUP BY anketa.id DESC
HAVING `age` >= $af AND `age` <= $at
LIMIT $start, $num;
 


Кол-во строк

$line_cnt=mysql_num_rows($result5);
 

Если тебе нужно другое - пиши подробнее

Отредактированно maximus_wand (16.09.2012 19:52:44)


Полярный медведь, это прямоугольный медведь после преобразования координат

Неактивен

 

#4 16.09.2012 23:25:23

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

Re: запрос на подсчет количества SELECT COUNT(*)

maximus_wand, спасибо что откликнулся. Ты правильно понял, мне нужно подсчитать количество строк, но этот запрос почему то не работет. Я очень плохо в таких сложных запросах разбираюсь, поэтому вообще не могу понять где ошибка...

maximus_wand написал:

наверно, можно убрать "ORDER BY id DESC", а DESC добавить в GROUP получиться:
GROUP BY anketa.id DESC

ORDER BY id DESC вообще не нужен и DESC в GROUP BY помоему тоже не нужен... насколько я понимаю DESC в запросе где нужно посчитать количество строк вообще никак не свистит))) и LIMIT $start, $num; тоже не нужно...

а вот в остальном я не могу понять, что нужно, а что нет) единственное что не пойму, почему в твоем запросе нет в SELECTe (foto_user. activ, users.avatar, bd_day, bd_month, bd_year, visiting_m, visiting_d, visiting_y, visiting_time, nik, city, online,) ?

Неактивен

 

#5 17.09.2012 23:19:28

maximus_wand
Участник
Откуда: Мурманск
Зарегистрирован: 16.09.2012
Сообщений: 13

Re: запрос на подсчет количества SELECT COUNT(*)

Если тебе нужно получить кол-во строк, которые вернёт запрос, например, чтобы потом сделать разбивку на страницы, но сами данные тебе не нужны.
То нужно этот запрос выполнить с минимальным кол-вом полей, чтобы не загружать сервер зря. Поэтому почти все поля выкинул.
Если убрать совсем все поля то GROUP и Having не выполнятся и кол-во строк будет не то.

Если нужно получить данные и знать сколько в них строк, то используется функция mysql_num_rows.

Тебе нужно первое, второе или ещё чего-то другое?


Полярный медведь, это прямоугольный медведь после преобразования координат

Неактивен

 

#6 17.09.2012 23:23:20

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: запрос на подсчет количества SELECT COUNT(*)

И вообще говоря можно любой запрос обернуть снаружи в

select count(*) from (ЗДЕСЬ_ТЕКСТ_ИСХОДНОГО_ЗАПРОСА) t;

и получить количество строк в исходном запросе. Но это панацея - неоптимально, лучше действительно упрощать запрос, как рекомендует maximus_wand.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 18.09.2012 03:19:10

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

Re: запрос на подсчет количества SELECT COUNT(*)

maximus_wand написал:

Тебе нужно первое, второе или ещё чего-то другое?

Первое)))

maximus_wand написал:

например, чтобы потом сделать разбивку на страницы, но сами данные тебе не нужны.

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

Неактивен

 

#8 18.09.2012 16:58:04

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

Re: запрос на подсчет количества SELECT COUNT(*)

короче, морочу всем голову, сам не могу понять что мне нужно...

это запрос из кода для постраничной навигации... вот рабочий пример из другой моей страницы

$num=50;
@$page=$_GET['page'];
$result00=mysql_query("SELECT COUNT(*) FROM anketa INNER JOIN users ON anketa.id_user=users.id WHERE users.id = anketa.id_user and del_ank = '0'",$db);
$temp=mysql_fetch_array($result00);
$posts=$temp[0];
$total=(($posts-1)/$num)+1;
$total=intval($total);
$page=intval($page);
if(empty($page) or $page<0) $page=1;
if($page>$total) $page=$total;
$start=$page*$num-$num;


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

Неактивен

 

#9 18.09.2012 21:34:11

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: запрос на подсчет количества SELECT COUNT(*)

serj011 написал:

может мне mysql_num_rows вообще в этом случае не подходит)))

Что значит не подходит? mysql_num_rows подходил для любого запроса.

serj011 написал:

просто этот запрос для меня очень сложный и я не знаю как его всунуть в $result00 через COUNT(*)?...(

Чтобы простым способо получить количество строка, которые вернёт запрос -принцип следующий - содержимое любого запроса (если не хочется или не можется упростить запрос) - запрос оборачивается в SELECT count(*) FROM (ТЕКСТ_ИСХОДНОГО_ЗАПРОСА) t;


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#10 18.09.2012 22:02:28

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

Re: запрос на подсчет количества SELECT COUNT(*)

я пробовал, может я его не првильно написал?

$result00=mysql_query("SELECT count(*) FROM (SELECT anketa.*, foto_user.activ, users.avatar, bd_day, bd_month, bd_year, visiting_m, visiting_d, visiting_y, visiting_time, nik, city, online, gender, (YEAR(CURDATE()) - YEAR(DATE(CONCAT(`bd_year`, '-', `bd_month`, '-', `bd_day`))) - IF(RIGHT(CURDATE(), 5) < RIGHT(DATE(CONCAT(`bd_year`, '-', `bd_month`, '-', `bd_day`)), 5), 1, 0)) AS `age` FROM anketa, foto_user, users WHERE users.del_ank = '0' and users.id = anketa.id_user and ($lf_S) $city_S $albom_foto $online_user GROUP BY anketa.id HAVING `age` >= $af AND `age` <= $at) t;",$db);

Неактивен

 

#11 18.09.2012 22:12:17

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: запрос на подсчет количества SELECT COUNT(*)

А чем Вас результат "пробы" не устроил? mysql_query вернул ошибку? Если да, то напишите какую. И опять же - сам запрос внутри SELECT count(*) FROM (...) срабатывает?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#12 19.09.2012 00:57:06

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

Re: запрос на подсчет количества SELECT COUNT(*)

сам запрос работает, и мало того результат "пробы" тоже работает, только не так как нужно.

может я сейчас напишу как полный лузер, это в силу моих плохих знаний(

$result00=mysql_query("SELECT count(*) FROM (SELECT anketa.*, foto_user.activ, users.avatar, bd_day, bd_month, bd_year, visiting_m, visiting_d, visiting_y, visiting_time, nik, city, online, gender, (YEAR(CURDATE()) - YEAR(DATE(CONCAT(`bd_year`, '-', `bd_month`, '-', `bd_day`))) - IF(RIGHT(CURDATE(), 5) < RIGHT(DATE(CONCAT(`bd_year`, '-', `bd_month`, '-', `bd_day`)), 5), 1, 0)) AS `age` FROM anketa, foto_user, users WHERE users.del_ank = '0' and users.id = anketa.id_user and ($lf_S) $city_S $albom_foto $online_user GROUP BY anketa.id HAVING `age` >= $af AND `age` <= $at) t;",$db);
$temp=mysql_num_rows($result00);

если вывести echo $temp, то выдаст правильно посчитанное количество строк...

а если вывести echo $temp рабочего кода постраничной навигации (Пост №8, 3 и 4 строки), который нормально работает на другой странице то результатом будет Array. ????

Т.е. сам код работает и считает количество строк, но не работает весь код, который выводит постраничную навигацию...

Неактивен

 

#13 16.10.2012 23:54:25

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

Re: запрос на подсчет количества SELECT COUNT(*)

Не надо плодить темы (повторную удалил)

serj011 написал:

$temp=mysql_num_rows($result00);

если вывести echo $temp, то выдаст правильно посчитанное количество строк...

а если вывести echo $temp рабочего кода постраничной навигации (Пост №8, 3 и 4 строки), который нормально работает на другой странице то результатом будет Array. ????

Потому что mysql_num_rows возращает число, а mysql_fetch_array массив.


serj011 написал:

Т.е. сам код работает и считает количество строк, но не работает весь код, который выводит постраничную навигацию...

Спорный вывод, в коде постраничной навигации используется $posts=$temp[0];

Неактивен

 

#14 17.10.2012 00:27:06

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

Re: запрос на подсчет количества SELECT COUNT(*)

vasya написал:

Спорный вывод, в коде постраничной навигации используется $posts=$temp[0];

Не понял смысл...) Помогите с запросом пожалуйста, я готов заплатить... он меня замучал уже )

Неактивен

 

#15 17.10.2012 00:41:06

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

Re: запрос на подсчет количества SELECT COUNT(*)

Ещё бы понять в чем именно помочь. Вам нужен был запрос, который считает кол-во строк, вам его подсказали, и насколько я понял он работает у вас правильно. Уточните в чем заключается текущая проблема.

Неактивен

 

#16 17.10.2012 10:06:43

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

Re: запрос на подсчет количества SELECT COUNT(*)

вроде разобрался... проблемма в другом была) запрос действительно работает) спасибо

Неактивен

 

Board footer

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