- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
В 2023 году 36,9% всех DDoS-атак пришлось на сферу финансов
А 24,9% – на сегмент электронной коммерции
Оксана Мамчуева
Зачем быть уникальным в мире, где все можно скопировать
Почему так важна уникальность текста и как она влияет на SEO
Ingate Organic
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
такой вопрос - есть две таблицы, вторая привязана к первой:
есть список значений id из первой таблицы, например, (2,3,5,6) нужно выбрать для этих ID данные из первой и второй - это просто:
Но как выбрать так чтобы из второй таблицы бралось только 5 записей для каждого id из первой? Т.е. чтобы из второй выбиралось для:
first.id=2 - только 5 записей из second
first.id=3 - только 5 записей из second
first.id=5 - только 5 записей из second
first.id=6 - только 5 записей из second
Т.е. нужен LIMIT - но не общий, а как бы только для каждой выборки из второй таблицы...
объединять с подзапросом разве что .
select first.*,second.data
from first, (select data from second where id_first =first.id limit 5) as second
в таком вариаете кочевряжится, пробовал уже, пишет ошибку
mysql_query: Unknown column 'first.id' in 'where clause'
оно и понятно - для этого подзапроса first.id просто не существует.
Чёт как-то задавался такой проблема, так и не решил, тоже интересно
Через переменные можно сделать но тормозить будет на большой базе.
Слушайте, malls, откуда вы такие извращенные задачи берете?
Слушайте, malls, откуда вы такие извращенные задачи берете?
Ага тоже интересно, что за мега скрипты постоянно юзаешь )))
Слушайте, malls, откуда вы такие извращенные задачи берете?
Опыт! :) Как говорится "свинья грязи найдет", так что был бы экспириенс (в наживании геморов) - а остальное приложится.
Ну правда прямо скажем это и неплохо - развивает мозги! :)
Ага тоже интересно, что за мега скрипты постоянно юзаешь )))
не скажу... :)
на самом деле не столько скрипты мега - сколько базы основательные... Поэтому все что может привести к упрощению выборок - весьма даже интересно.
ЗЫ: по теме пока понял только что для таких выборок (это как бы циклическая выборка получается) можно юзать только такую фичу из 5-го мускуля как "хранимые процедуры" - они позволяют как бы создавать скриптинг "на уровне мускуля" и к его работе обращаться.
Но в эти дебри лезть не хочу пока, поищу попроще пути.
KosoyRoman если интересно можешь про них вот отсюда узнать немного.
Можно переменной считать кол-во выбранных из first id, потом джойнить, потом сортировать как нить по второй переменной и делать limit 5*@varname - изврат
Процедуры в mysql вообще зло. Они медленные и дампить их неудобно. но в данном случае похоже не избежать
А кстати можно делать сортировку по двум полям не последовательно, а одновременно?
Т.е. как бы не
ORDER BY f1,f2
а
ORDER BY f1+f2
----------------
UPD да кажется прокатывает
ой да. так не получится, зато получится выбрать ид записей в second и прилепить их через where in ().
однако у меня такой запрос в mysql 5.0 выдает
ERROR 1235 (42000): This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
так что все гораздо хуже.
Получается проще на php в цикле. Иначе придется изучать процедуры и курсоры в mysql.
Получается проще на php в цикле. Иначе придется изучать процедуры и курсоры в mysql.
В цикле нет... На эти грабли с памятью в прошлый раз наступил. В первой таблице 200 записей, а во второй пара миллионов. Эта пара миллионов удавит скрипт как класс. А по другому придумал - мне надо не больше пяти любых записей для каждого ID - берем лимит 1000 но рандомной сортировкой...
Получаем примерно 1000 / 200 ~ 5 записей на каждый ID (это статистика) - лишние уже отбрасываем скриптом - и волки целы и овцы сыты. Потом просто уже юзаным записям флаги расставляем чтоб в следующую выборку не попадали.