Искать  
 
   
 
Несданартный SQL запрос
Отправлено: 17 Июль 2011 02:58 P.M.   [ Игнорировать ]
Member
Avatar
RankRankRank
Всего сообщений:  363
Зарегистрирован  2009-01-02

Вобщем такая ситуация.
Есть блог cars и  photos
В блоге cars у каждой записи свой автор. То есть больше 1 записи у 1 автора тут нет и не будет.
В photos посетители добавляют фотографии. Неограниченное кол-во.
Что нужно:
Вывод 5 записей из блога cars, при условии что у автора каждой записи больше 3 записей из блога photos.
Как сие реализовать?

Буду очень благодарен за помощь.

 Подпись 

Я в космосе

Профиль
 
 
Отправлено: 17 Июль 2011 08:58 P.M.   [ Игнорировать ]   [ # 1 ]
Member
Avatar
RankRankRank
Всего сообщений:  224
Зарегистрирован  2010-11-20

Stop-TussiN, а... покажите, please, что уже сделано вами, собственно то, что и... вызвало проблему.

Профиль
 
 
Отправлено: 17 Июль 2011 09:43 P.M.   [ Игнорировать ]   [ # 2 ]
Member
Avatar
RankRankRank
Всего сообщений:  363
Зарегистрирован  2009-01-02

Ничего не сделано. я понятия не имею как это организовать, поэтому и спрашиваю.

 Подпись 

Я в космосе

Профиль
 
 
Отправлено: 17 Июль 2011 10:20 P.M.   [ Игнорировать ]   [ # 3 ]
Member
Avatar
RankRankRank
Всего сообщений:  224
Зарегистрирован  2010-11-20

Stop-TussiN, попытайтесь описать предполагаемый алгоритм,
логику работы приложения (скрипта, в данной ситуации)
простыми словами, как это должно работать по-вашему...

Профиль
 
 
Отправлено: 17 Июль 2011 10:24 P.M.   [ Игнорировать ]   [ # 4 ]
Member
Avatar
RankRankRank
Всего сообщений:  363
Зарегистрирован  2009-01-02

Так я же написал.
Нужно составить запрос на MYSQL:
Вывод 5 записей из блога cars, при условии что у автора каждой записи больше 3 записей из блога photos.

 Подпись 

Я в космосе

Профиль
 
 
Отправлено: 17 Июль 2011 10:30 P.M.   [ Игнорировать ]   [ # 5 ]
Member
Avatar
RankRankRank
Всего сообщений:  224
Зарегистрирован  2010-11-20

Stop-TussiN, это всего лишь задача, цель.
Дай мне готовое решение! smile
А где хотябы один из вариантов преполагаемого решения?
Где попытка сделать хоть что-либо своими руками?

Профиль
 
 
Отправлено: 17 Июль 2011 10:32 P.M.   [ Игнорировать ]   [ # 6 ]
Member
Avatar
RankRankRank
Всего сообщений:  363
Зарегистрирован  2009-01-02

Что сделать то, если я не знаю КАКИМ образом такое вообще реализовать? все что я могу-написать запрос на вывод записей с разной сортировкой.
Вопрос был задан к тем, кто знает более менее SQL

 Подпись 

Я в космосе

Профиль
 
 
Отправлено: 18 Июль 2011 01:19 A.M.   [ Игнорировать ]   [ # 7 ]
Студент
RankRank
Всего сообщений:  131
Зарегистрирован  2010-12-14

я бы попробовал сделать через join
выбрал бы всех авторов с веблога photos, у которых более 3х записей и выполнил бы join для тех авторов, кто писал хоть раз в cars
Подробнее попробую написать завтра, если это будет актуально

UPD:
попробуйте переделать следующий запрос под ЕЕ 1.х

select tb1.entry_id from exp_channel_titles tb1 join (SELECT author_id FROM exp_channel_titles where channel_id 1 group by author_id having count(1) > 3tb2 where tb1.channel_id and tb1.author_id tb2.author_id limit 5 
Профиль
 
 
Отправлено: 18 Июль 2011 11:41 A.M.   [ Игнорировать ]   [ # 8 ]
Member
Avatar
RankRankRank
Всего сообщений:  363
Зарегистрирован  2009-01-02

Вот картинку наваял для наглядного примера
cars.gif

Блог cars
Поля: {title}

Блог photos
Поля: {pic_gallery}

 Подпись 

Я в космосе

Профиль
 
 
Отправлено: 19 Июль 2011 05:13 P.M.   [ Игнорировать ]   [ # 9 ]
Member
Avatar
RankRankRank
Всего сообщений:  363
Зарегистрирован  2009-01-02

Переделал запрос. Все получилось. Спасибо большое за помощь!

 Подпись 

Я в космосе

Профиль
 
 
Отправлено: 19 Июль 2011 05:17 P.M.   [ Игнорировать ]   [ # 10 ]
Студент
RankRank
Всего сообщений:  131
Зарегистрирован  2010-12-14

Пожалуйста.
По идее, такой запрос отрабатывается за адекватное время.

Профиль
 
 
Отправлено: 19 Июль 2011 05:27 P.M.   [ Игнорировать ]   [ # 11 ]
Member
Avatar
RankRankRank
Всего сообщений:  363
Зарегистрирован  2009-01-02

Рано радовался. Не могу в запросе выудить дополнительное поле {pic_gallery}. Нужно из 3 блога выудить дополнительное поле {pic_gallery}.
Подскажите пожалуйста как правильно вставить LEFT JOIN тут. я запутался уже.
Вот что получилось:

{exp:query sql="
select tb1.entry_id AS ent, tb1.title AS entt, tb1.weblog_id, tb1.author_id 
from exp_weblog_titles tb1 
join (SELECT author_id
FROM exp_weblog_titles 
where weblog_id = 4 
group by author_id having count(1) > 3) tb2 
where tb1.weblog_id = 3 and tb1.author_id = tb2.author_id limit 5  
"
}



Категория автомобиля
:(блог 4)
{exp:query sql="
SELECT c.cat_name AS cat_nm, c.cat_url_title, c.cat_id, c.cat_image, c.cat_description, c.parent_id, p.cat_id, p.entry_id, c.group_id 
FROM (exp_categories AS c, exp_category_posts AS p) 
WHERE c.cat_id = p.cat_id 
AND p.entry_id IN ('{ent}') 
ORDER BY c.group_id, c.parent_id, c.cat_order
"
}
{cat_nm}
{
/exp:query}

{
/exp:query} 
 Подпись 

Я в космосе

Профиль
 
 
Отправлено: 19 Июль 2011 05:31 P.M.   [ Игнорировать ]   [ # 12 ]
Member
Avatar
RankRankRank
Всего сообщений:  363
Зарегистрирован  2009-01-02

Разобрался.
Вот готовое решение:

{exp:query sql="
select tb1.entry_id AS ent, tb1.title AS entt, tb1.weblog_id, tb1.author_id, wd.field_id_14 AS wdf 
from exp_weblog_titles tb1 
join (SELECT author_id
FROM exp_weblog_titles 
where weblog_id = 4 
group by author_id having count(1) > 3) tb2 
LEFT JOIN exp_weblog_data AS wd ON tb1.entry_id = wd.entry_id
where tb1.weblog_id = 3 and tb1.author_id = tb2.author_id limit 5  
"
}

{wdf}


{exp
:query sql="
SELECT c.cat_name AS cat_nm, c.cat_url_title, c.cat_id, c.cat_image, c.cat_description, c.parent_id, p.cat_id, p.entry_id, c.group_id 
FROM (exp_categories AS c, exp_category_posts AS p) 
WHERE c.cat_id = p.cat_id 
AND p.entry_id IN ('{ent}') 
ORDER BY c.group_id, c.parent_id, c.cat_order
"
}
{cat_nm}
{
/exp:query}

{
/exp:query} 
 Подпись 

Я в космосе

Профиль