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
Форумы портала PHP.SU :: Версия для печати :: Выборка mysql
Форумы портала PHP.SU » » Вопросы новичков » Выборка mysql

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

1. myocean - 11 Декабря, 2011 - 15:44:53 - перейти к сообщению
Здравствуйте!

Подскажите, столкнулся со следующей проблемой...
Есть база mysql содержащая строки приблизительно следующего содержания

name | solution
star blablabla1
star blablabla2
cosmo blablabla1
cosmo blablabla2
cosmo blablabla3
...
space blablabla1
space blablabla2


Как мне выбрать 5 уникальных записей по name, (но содержащих все строки где встречаются эти уникальные имена), затем 5 следующих и т.п.

иными словами, как использовать limit но не по строкам а по уникальным именам?
и вообще возможно ли это?


Спасибо
2. Panoptik - 11 Декабря, 2011 - 15:48:20 - перейти к сообщению
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT DISTINCT `name` FROM `table` LIMIT 5
3. myocean - 11 Декабря, 2011 - 15:56:08 - перейти к сообщению
А если есть еще поля... то нужно делать второй запрос по найденым уникальным именам?
4. etoYA - 11 Декабря, 2011 - 16:05:48 - перейти к сообщению
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT  `поле`,`поле` FROM `таблица` LIMIT 5
5. Panoptik - 11 Декабря, 2011 - 16:20:58 - перейти к сообщению
myocean пишет:

А если есть еще поля... то нужно делать второй запрос по найденым уникальным именам?

какие поля, поясните что именно вам нужно, а ответ может и найдется, а догадываться что и куда дело неприятное
6. myocean - 11 Декабря, 2011 - 16:51:03 - перейти к сообщению
Попробую еще раз...
Как одним запросом получить данные из таблицы...

name solution description и тд.

ivan sol1 des1 ...
ivan sol2 des2 ...
ivan sol3 des1 ...
ivan sol4 des2 ...
max sol1 des1 ...
max sol2 des1 ...
max sol3 des1 ...
max sol5 des1 ...
sava sol1 des1 ...
sava sol2 des2 ...
sava sol3 des2 ...
sava sol4 des2 ...


с лимитом, скажем в два уникальных name


то есть нужно LIMIT 2
при DISTINCT name

и получить на выходе следующий массив:


ivan sol1 des1 ...
ivan sol2 des2 ...
ivan sol3 des1 ...
ivan sol4 des2 ...
max sol1 des1 ...
max sol2 des1 ...
max sol3 des1 ...
max sol5 des1 ...
7. Данил_123 - 11 Декабря, 2011 - 18:13:57 - перейти к сообщению
SELECT * FROM table
8. myocean - 11 Декабря, 2011 - 18:17:20 - перейти к сообщению
Данил_123 пишет:
SELECT * FROM table


При * он выведет всю таблицу ;(

Как ограничить вывод лимитом?
9. Данил_123 - 11 Декабря, 2011 - 18:23:20 - перейти к сообщению
SELECT * FROM table WHERE name = unique LIMIT 2 вроде так.. Какие имена уникальныи?
10. Champion - 11 Декабря, 2011 - 18:36:33 - перейти к сообщению
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT *
  2. FROM tbl
  3. WHERE name IN (
  4.   SELECT name
  5.   FROM tbl
  6.   GROUP BY name
  7.   ORDER BY name
  8.   LIMIT 495, 5
  9. )
  10.  

но вообще это не будет быстро работать. Чтоб работало быстро, надо поделать всякие извращения типа периодического перенумеровывания таблицы или еще чего-нибудь
11. myocean - 11 Декабря, 2011 - 18:43:10 - перейти к сообщению
Спасибо, но пишет This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

...

В принципе можно в два запроса...
Сначала собрать все уникальные имена с лимитом, а вторым вывести все WHERE IN по этим именам ....
12. Champion - 11 Декабря, 2011 - 18:47:48 - перейти к сообщению
Ну да, тогда в 2 запроса
13. myocean - 11 Декабря, 2011 - 18:49:05 - перейти к сообщению
Еще раз спасибо!

 

Powered by ExBB FM 1.0 RC1