Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выборка из выборки
 
 автор: Trivium   (25.10.2010 в 14:25)   письмо автору
 
 

Всем привет.
Как можно реализовать выборку из выборки?
Задача в том, чтобы взять 50 последних записей из таблицы и потом из них взять 10 записей отсортированных случайно, и всё это одним запросом... Или одним нельзя?
К примеру так вот:
SELECT id FROM (SELECT id FROM tbl ORDER BY id DESC LIMIT 50) ORDER BY RAND() LIMIT 10

Не работает...

  Ответить  
 
 автор: Лена   (25.10.2010 в 16:24)   письмо автору
 
   для: Trivium   (25.10.2010 в 14:25)
 


SELECT id FROM tbl WHERE id IN 
(SELECT id FROM tbl ORDER BY id DESC LIMIT 50)
ORDER BY RAND() LIMIT 10

  Ответить  
 
 автор: Trivium   (25.10.2010 в 16:28)   письмо автору
 
   для: Лена   (25.10.2010 в 16:24)
 

#1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

  Ответить  
 
 автор: Лена   (25.10.2010 в 16:34)   письмо автору
 
   для: Trivium   (25.10.2010 в 16:28)
 

В подзапросе не проходит LIMIT
А какая у вас версия MySQL?

  Ответить  
 
 автор: Trivium   (25.10.2010 в 16:41)   письмо автору
 
   для: Лена   (25.10.2010 в 16:34)
 

5.1.51
все лимиты работают, скорее в IN нельзя писать подзапросы

  Ответить  
 
 автор: Лена   (25.10.2010 в 16:48)   письмо автору
 
   для: Trivium   (25.10.2010 в 16:41)
 

Подзапросы точно можно. LIMIT , видимо, нельзя.

У меня тут еще один вариант возник. А если попробовать вот так:

SELECT id FROM tbl t
JOIN (SELECT id FROM tbl ORDER BY id DESC LIMIT 50) t2 ON t.id = t2.id 
ORDER BY RAND() LIMIT 10

  Ответить  
 
 автор: Trivium   (25.10.2010 в 17:03)   письмо автору
 
   для: Лена   (25.10.2010 в 16:48)
 

А что за t и t2?

  Ответить  
 
 автор: Valick   (25.10.2010 в 17:04)   письмо автору
 
   для: Trivium   (25.10.2010 в 17:03)
 

алиасы :)
заставьте работать Ваш первый вариант, он как ни крути лучше)

  Ответить  
 
 автор: Trivium   (25.10.2010 в 17:08)   письмо автору
 
   для: Trivium   (25.10.2010 в 17:03)
 

вот так кстати работает
SELECT id FROM tbl WHERE id IN 
(SELECT id FROM tbl ORDER BY id DESC)
ORDER BY RAND() LIMIT 10 

Таки IN не поддерживает лимиты...

  Ответить  
 
 автор: Valick   (25.10.2010 в 17:12)   письмо автору
 
   для: Trivium   (25.10.2010 в 17:08)
 

а вот так?
SELECT t.id FROM (SELECT id FROM tbl ORDER BY id DESC LIMIT 50) AS t ORDER BY RAND() LIMIT 10

  Ответить  
 
 автор: Trivium   (25.10.2010 в 17:21)   письмо автору
 
   для: Valick   (25.10.2010 в 17:12)
 

Так сортирует только последнюю десятку, но не 50 записей...

  Ответить  
 
 автор: Valick   (25.10.2010 в 16:39)   письмо автору
 
   для: Trivium   (25.10.2010 в 14:25)
 

отдельно SELECT id FROM tbl ORDER BY id DESC LIMIT 50 работает?
кстати Ваш вариант на мой взгляд лучше чем вариант Лены.

  Ответить  
 
 автор: Лена   (25.10.2010 в 16:49)   письмо автору
 
   для: Valick   (25.10.2010 в 16:39)
 

чем лучше? Тут как бы от перемены слагаемых...

  Ответить  
 
 автор: Valick   (25.10.2010 в 16:59)   письмо автору
 
   для: Лена   (25.10.2010 в 16:49)
 

тут как бы... не так
в первом случае только сортировка
во втором случае сортировка + поиск
__
поставте себя на место MySQL :)

  Ответить  
 
 автор: Trivium   (25.10.2010 в 18:00)   письмо автору
 
   для: Trivium   (25.10.2010 в 14:25)
 

А из FROM получается нельзя делать выборки?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования