SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 14.10.2011 18:07:59

userbanderas
Участник
Зарегистрирован: 14.10.2011
Сообщений: 12

Выбрать чаще всего встречающееся значение

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

Неактивен

 

#2 14.10.2011 18:12:14

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

Re: Выбрать чаще всего встречающееся значение

SELECT id_hot_num, count(*) c FROM bronirovanie GROUP BY id_hot_num ORDER BY c DESC LIMIT 1;

Неактивен

 

#3 14.10.2011 18:25:46

userbanderas
Участник
Зарегистрирован: 14.10.2011
Сообщений: 12

Re: Выбрать чаще всего встречающееся значение

Спасибо огромное!!!!!!!!!!!!!!!! Заработало! smile и smile

Неактивен

 

#4 14.10.2011 21:03:21

userbanderas
Участник
Зарегистрирован: 14.10.2011
Сообщений: 12

Re: Выбрать чаще всего встречающееся значение

Появился другой вопрос. Почему у меня не работает запрос такого вида:
"SELECT name_city FROM city WHERE id IN (SELECT id_city FROM hotel WHERE id IN (SELECT id_hotel FROM hotel_number WHERE id IN (SELECT id_hot_num FROM bronirovanie WHERE id_hot_num = '$id_hot_num')))"

Выдаёт следующую ошибку:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in

Неактивен

 

#5 14.10.2011 21:17:36

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

Re: Выбрать чаще всего встречающееся значение

bronirovanie WHERE id_hot_num = '".$id_hot_num."')))"

Неактивен

 

#6 14.10.2011 21:21:54

userbanderas
Участник
Зарегистрирован: 14.10.2011
Сообщений: 12

Re: Выбрать чаще всего встречающееся значение

Уважаемый vasya! Тысяча извинений, я не тот код привел вам!
Вот этот не правильно работает:
"SELECT name_city FROM city WHERE id IN (SELECT id_city FROM hotel WHERE id IN (SELECT id_hotel FROM hotel_number WHERE id IN (SELECT id_hot_num, count(*) c FROM bronirovanie GROUP BY id_hot_num ORDER BY c DESC LIMIT 1)))"

А ошибку выдает ту же самую.

Неактивен

 

#7 14.10.2011 21:31:01

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

Re: Выбрать чаще всего встречающееся значение

Ошибка в последнем подзапросе. Рекомендую обрабатывать ошибки, чтобы не гадать
$sql="ваш запрос"
$res=mysql_query($sql) or die(mysql_error());

Неактивен

 

#8 14.10.2011 22:00:45

userbanderas
Участник
Зарегистрирован: 14.10.2011
Сообщений: 12

Re: Выбрать чаще всего встречающееся значение

Вот такая ошибка:
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
Скажите, а можно по другому оптимизировать данный запрос, чтобы он правильно сработал?

Неактивен

 

#9 14.10.2011 22:04:29

userbanderas
Участник
Зарегистрирован: 14.10.2011
Сообщений: 12

Re: Выбрать чаще всего встречающееся значение

Спасибо за обработку ошибок!

Неактивен

 

#10 14.10.2011 22:24:06

userbanderas
Участник
Зарегистрирован: 14.10.2011
Сообщений: 12

Re: Выбрать чаще всего встречающееся значение

Работает вот таким способом, с помощью 2-ух выборок:
$result_count = mysql_query("SELECT id_hot_num, count(*) c FROM bronirovanie GROUP BY id_hot_num ORDER BY c DESC LIMIT 2",$db);
$myrow_count = mysql_fetch_array($result_count);
$id_hot_num = $myrow_count['id_hot_num'];

$sql="SELECT name_city FROM city WHERE id IN (SELECT id_city FROM hotel WHERE id IN (SELECT id_hotel FROM hotel_number WHERE id IN (SELECT id_hot_num FROM bronirovanie WHERE id_hot_num = '$id_hot_num')))";
$res=mysql_query($sql,$db) or die(mysql_error());
$myrow_city = mysql_fetch_array($res);

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

Неактивен

 

#11 17.10.2011 01:57:03

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Выбрать чаще всего встречающееся значение

Ну, при правильной расстановке индексов особых бед не должно быть.
Если вдруг MySQL решит выполнять подзапрос для каждой записи - можно будет переписать через JOIN или разбить на отдельные запросы.

Неактивен

 

#12 17.10.2011 02:05:44

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

Re: Выбрать чаще всего встречающееся значение

userbanderas написал:

$result_count = mysql_query("SELECT id_hot_num, count(*) c FROM bronirovanie GROUP BY id_hot_num ORDER BY c DESC LIMIT 2",$db);

А зачем вам limit 2 и count(*) в списке выбираемых полей?

SELECT id_hot_num, FROM bronirovanie GROUP BY id_hot_num ORDER BY count(*) DESC LIMIT 1;

Неактивен

 

Board footer

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