Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > как сделать SQL запрос


Автор: neoks 27.6.2012, 11:50
Помогите составить запрос, мне нужно выделить строки не больше с 5 уникальными значениями.
Есть таблица

Код

pages
-------------------
url           | cid  | key
-------------------
/pages/2 | 4    | ......
/pages/3 | 4    | ......
/pages/5 | 6    | ......


И таблица

Код

sites
-------------------
id| name      | ......
-------------------
4 | test.ru    | ......
6 | test.ru    | ......
8 | test.ru    | ......


Мне нужно выделить строки из таблицы pages  и как бы так объяснить, чтоб ячейка cid была уникальна то-есть не больше 5 повторявшийся значений
Скажем я выделил строки например только с одним повторявшимся значением в результате получу строки
Код

/pages/2 | 4
/pages/5 | 6

Теперь например с 2 повторявшимся значениями
Код

/pages/2 | 4
/pages/3 | 4
/pages/5 | 6


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

SELECT * 
FROM  `pages` 
GROUP BY cid > 2

Как сделать чтоб GROUP был и выдавал больше 1-го повторявшийся значения ?

Автор: AndreyIQ 27.6.2012, 12:09
Если я правильно понял:
Код

SELECT * 
FROM  `pages` 
WHERE (SELECT count(*) from `pages` as p where p.cid = pages.cid)<5

Автор: neoks 27.6.2012, 13:11
Очень, очень, очень медленно что я даже не дождался результата с лимитом 30 ))

Автор: teroni 27.6.2012, 14:41
Я бы не насиловал мозг, в запросе брал бы все записи, а в php счетчиком выкидывал ненужные. 

Автор: Aliance 27.6.2012, 14:53
having, не?

Автор: neoks 27.6.2012, 14:54
Ну я сначала так и делал, тупо откидывал если больше 5, но это не быстрый результат пришлось делать крон ) после чего когда многие одновременно начинали закупаться то база начинала уходить чуть ли не в накаут )) теперь обдумываю как это дело оптимизировать и сделать быстрее без крона

Автор: neoks 27.6.2012, 15:14
Не могу вникнуть в этот having
Вот запрос
Код

SELECT * 
FROM  `pages` 
GROUP BY сid
HAVING COUNT( id ) >5
ORDER BY сid
LIMIT 30


Всеравно cid повторяется тока один раз, а нужно как минимум несколько раз, может неправильно написал запрос ?

Автор: AndreyIQ 27.6.2012, 15:49
Цитата(neoks @  27.6.2012,  13:11 Найти цитируемый пост)
Очень, очень, очень медленно что я даже не дождался результата с лимитом 30 )) 

У Вас индекс по cid есть?


Цитата(neoks @  27.6.2012,  15:14 Найти цитируемый пост)
Не могу вникнуть в этот having
Вот запрос
код SQL
1:
2:
3:
4:
5:
6:
SELECT * 
FROM  `pages` 
GROUP BY сid
HAVING COUNT( id ) >5
ORDER BY сid
LIMIT 30


Всеравно cid повторяется тока один раз, а нужно как минимум несколько раз, может неправильно написал запрос ? 

Наверно все таки 
Код

HAVING COUNT( cid ) <5

И все равно выдаст по одной записи

Автор: neoks 27.6.2012, 16:25
Цитата(AndreyIQ @  27.6.2012,  15:49 Найти цитируемый пост)
У Вас индекс по cid есть?

Стока раз читал, смотрел и все равно не могу понять что такое индекс ? ))

Цитата(AndreyIQ @  27.6.2012,  15:49 Найти цитируемый пост)
И все равно выдаст по одной записи

Так и есть, все равно по одной )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)