Спустя 8 минут, 42 секунды (10.12.2009 - 23:08) Romms написал(а):
чото я непонял вопрос... какие ячейки?
Цитата |
где в ячейке Б больше 20 записей |
Спустя 1 час, 35 минут, 30 секунд (11.12.2009 - 00:44) z3rg написал(а):
тоесть есть таблица в ней 2 столбца А и Б, в А идут к примеру категории, в Б ссылки, и вот нужно вывести все категории где ссылок больше 20.
пример:
категория1 ссылка1
категория1 ссылка2
...
категория1 ссылка20
и вот если таких записей больше 20 нужно вывести категория1
на пхп 2-мя запросами это можно сделать так сначала сгрупировать по категории а потом подсчитывать число записей с названием категории и если больше 20 то вывести, а вот как 1 запросом это зделать? чет мучу и нифина
пример:
категория1 ссылка1
категория1 ссылка2
...
категория1 ссылка20
и вот если таких записей больше 20 нужно вывести категория1
на пхп 2-мя запросами это можно сделать так сначала сгрупировать по категории а потом подсчитывать число записей с названием категории и если больше 20 то вывести, а вот как 1 запросом это зделать? чет мучу и нифина
Спустя 45 минут, 17 секунд (11.12.2009 - 01:29) sergeiss написал(а):
Вот так примерно (проверил в Постгре, но в MySQL тоже должно работать):
Словами объяснить сей запрос можно, но попробуй это сделать самостоятельно, для своей же собственной пользы.
По сути, рассматриваем одну и ту же таблицу дважды, как 2 разные таблицы. Никто и ничто не мешает нам это делать. Но для различия таблиц даем им разные синонимы (алиасы).
select * from table1 t1
where (select count(*) as c from table1 t2 where t1.column_a=t2.column_a) > 20
Словами объяснить сей запрос можно, но попробуй это сделать самостоятельно, для своей же собственной пользы.
По сути, рассматриваем одну и ту же таблицу дважды, как 2 разные таблицы. Никто и ничто не мешает нам это делать. Но для различия таблиц даем им разные синонимы (алиасы).
Спустя 2 часа, 21 минута, 48 секунд (11.12.2009 - 03:51) z3rg написал(а):
sergeiss, мега респект, както даже и не подумал что так можно, только наверное нужно в конце после
а то повторятся будет результат
sergeiss, спасибо большое, суть уловил.
... 20 group by column_a
а то повторятся будет результат
sergeiss, спасибо большое, суть уловил.
Спустя 5 часов, 4 минуты, 41 секунда (11.12.2009 - 08:56) sergeiss написал(а):
Цитата (z3rg @ 11.12.2009 - 04:51) |
а то повторятся будет результат |
Можно и так - сам смотри, согласно тому, что тебе нужно получить. В "моем" запросе получишь все строки, количество которых по определенному критерию больше 20, а в "твоем" запросе - по одному экземпляру строки из тех, которых больше 20. Только надо указать в выборке не все, а определенные колонки.
Но и без group by результат не будет повторяться! Будут выбраны именно разные строки, соответствующие определенным критериям.
Спустя 9 часов, 29 минут, 8 секунд (11.12.2009 - 18:25) z3rg написал(а):
Спасибо за ответ, а вот 2 запроса с груп бу и дистинкт, по идее с групбай должно выполнятся быстрее если большая база а с дистинкт если маленькая ?
ps с group by У меня почемуто база виснет, если выполнить по отдельности то совокупно меньше 10 сек
select t1.cat from links_new t1
where (select count(*) from links_new t2 where t2.cat=t1.cat) > 20 group by t1.cat limit 10
select DISTINCT t1.cat from links_new t1
where (select count(*) from links_new t2 where t2.cat=t1.cat) > 20 limit 10
ps с group by У меня почемуто база виснет, если выполнить по отдельности то совокупно меньше 10 сек
Спустя 4 часа, 29 минут, 1 секунда (11.12.2009 - 22:54) sergeiss написал(а):
Насчет скорости ничего не могу сказать.
Спустя 10 часов, 43 минуты, 26 секунд (12.12.2009 - 09:37) glock18 написал(а):
Цитата |
Спасибо за ответ, а вот 2 запроса с груп бу и дистинкт, по идее с групбай должно выполнятся быстрее если большая база а с дистинкт если маленькая |
совершенно ни на чем не обоснованное заявление. посмотри explain и сразу станет понятно, что именно тормозит. возможно даже получится исправить это.