Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Максимальное значение

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
ensik
Отправлено: 27 Декабря, 2011 - 13:13:22
Post Id



Новичок


Покинул форум
Сообщений всего: 46
Дата рег-ции: Дек. 2011  


Помог: 0 раз(а)




Привет всем!
БД: MySql
Есть таблица с полями: id,name,picture,vote.

Нужно из нее вытащить содержимое name,picture строки, в которой vote - максимальный
Цель: Вывести Имя и фото того, у кого найбольшее количество голосов.

Пытался тянуть так:
Но выводит первое попавшийся елемент, а не максимальный
PHP:
скопировать код в буфер обмена
  1. $res = mysql_query("SELECT * FROM `table` WHERE `vote`=(SELECT max(`vote`) FROM `table`)");
  2.  
  3. $row = mysql_fetch_assoc($res);
  4.  
  5.  
  6. // дале вывод содержимого



Заранее спасибо.

(Отредактировано автором: 27 Декабря, 2011 - 13:14:33)

 
 Top
EuGen Администратор
Отправлено: 27 Декабря, 2011 - 13:18:05
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




CODE (sql):
скопировать код в буфер обмена
  1. SELECT * FROM `table` ORDER BY `vote` DESC LIMIT 1


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
ensik
Отправлено: 27 Декабря, 2011 - 13:23:44
Post Id



Новичок


Покинул форум
Сообщений всего: 46
Дата рег-ции: Дек. 2011  


Помог: 0 раз(а)




EuGen пишет:
CODE (sql):
скопировать код в буфер обмена
  1. SELECT * FROM `table` ORDER BY `vote` DESC LIMIT 1


Спасибо, выручил!
 
 Top
Самогонщик
Отправлено: 27 Декабря, 2011 - 13:34:35
Post Id



Посетитель


Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011  


Помог: 8 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT max(`vote`) FROM `table`

Сложность о(н), а ORDER BY требует сортировки о (н*лог(н)) + памяти о(н). Хотя я не ручаюсь сказать, что будет быстрее, если мускл использует оптимизацию основываясь на LIMIT 1

ensik, можешь ли ты сравнить скорость выполнения этих запросов?
(Добавление)
Стоп, сейчас меня отпустит
(Добавление)
Нужно внимательнее было читать
 
 Top
EuGen Администратор
Отправлено: 27 Декабря, 2011 - 13:40:00
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Это и я могу сказать:
- случай для первичного ключа:
PHP:
скопировать код в буфер обмена
  1. mysql> explain select max(id) from users;
  2. +----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+
  3. | id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra                        |
  4. +----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+
  5. |  1 | SIMPLE      | NULL  | NULL | NULL          | NULL | NULL    | NULL | NULL | Select tables optimized away |
  6. +----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+
  7. 1 row in set (0.07 sec)
  8.  
  9. mysql> explain select id from users order by id limit 1;
  10. +----+-------------+-------------+-------+---------------+---------+---------+------+------+-------------+
  11. | id | select_type | table       | type  | possible_keys | key     | key_len | ref  | rows | Extra       |
  12. +----+-------------+-------------+-------+---------------+---------+---------+------+------+-------------+
  13. |  1 | SIMPLE      |       users | index | NULL          | PRIMARY | 4       | NULL |    1 | Using index |
  14. +----+-------------+-------------+-------+---------------+---------+---------+------+------+-------------+
  15. 1 row in set (0.07 sec)


И в случае, если индекса нет никакого:
PHP:
скопировать код в буфер обмена
  1. mysql> explain select max(approve_code) from users;
  2. +----+-------------+-------------+------+---------------+------+---------+------+--------+-------+
  3. | id | select_type | table       | type | possible_keys | key  | key_len | ref  | rows   | Extra |
  4. +----+-------------+-------------+------+---------------+------+---------+------+--------+-------+
  5. |  1 | SIMPLE      |       users | ALL  | NULL          | NULL | NULL    | NULL | 651490 |       |
  6. +----+-------------+-------------+------+---------------+------+---------+------+--------+-------+
  7. 1 row in set (0.07 sec)
  8.  
  9. mysql> explain select approve_code  from users order by approve_code desc limit 1;
  10. +----+-------------+-------------+------+---------------+------+---------+------+--------+----------------+
  11. | id | select_type | table       | type | possible_keys | key  | key_len | ref  | rows   | Extra          |
  12. +----+-------------+-------------+------+---------------+------+---------+------+--------+----------------+
  13. |  1 | SIMPLE      |       users | ALL  | NULL          | NULL | NULL    | NULL | 651490 | Using filesort |
  14. +----+-------------+-------------+------+---------------+------+---------+------+--------+----------------+
  15. 1 row in set (0.07 sec)


- Разница есть в обоих случаях в пользу первого варианта. Но не забывайте, что, просто выбрав MAX, Вам еще нужно будет сделать второй запрос на выбор всего нужного. В случае индекса это да, выигрыш(правда, почти ничтожный). Но в случае его отсутствия - это еще один FULL SCAN.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB