Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос. / 7 сообщений из 7, страница 1 из 1
08.08.2013, 22:02:03
    #38360239
paha4444
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
Есть 2 таблицы
1 таблица - Объявления
2 таблица содержит изображения к объявлениям.

Мне нужно в одном запросе выбрать все объявления и к каждому объявлению выбрать только 1 изображение из 2 таблицы(поле image_path).

Таблица 1 - ads
поля id,text

Таблица 2 - image_ads
поля id,id_ads,image_path

Пробую:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT country.name as country_name,
             region.name as region_name,
             rayon.name as rayon_name,
             m_r.name as m_r_name,
             i_ads.image_path as image_path
             
  
      FROM ads AS ads
      LEFT JOIN
      (
        select * from image_ads where image_ads.id_ads = ads.id LIMIT 1
      ) AS i_ads ON i_ads.id_ads = ads.id



Неработает.
...
Рейтинг: 0 / 0
08.08.2013, 22:18:00
    #38360252
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
paha4444,

Доку по джойнам - читали? И не будет работать. В Мускуле нет коррелированных подзапросов в секции from.

В подзапрос воткните первую таблицу ишо раз и там тогда можно будет сделать лимит. Только чем он вам "там" поможет - ума не приложу.

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

Или нумеровать все и брать по заданному номеру (читайте фак по нумерации записей).

как-то так.
...
Рейтинг: 0 / 0
08.08.2013, 22:26:08
    #38360258
paha4444
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
Вот группирую по первой

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
  $q="SELECT country.name as country_name,
             region.name as region_name,
             rayon.name as rayon_name,
             m_r.name as m_r_name,
             i_ads.image_path as image_path
             
  
      FROM ads AS ads   
    

    
      LEFT JOIN image_ads AS i_ads ON i_ads.id_ads = ads.id 


      
      LEFT JOIN micro_rayon AS m_r ON m_r.id = ads.id_micro_rayon
      LEFT JOIN rayon ON rayon.id = ads.id_rayon
      LEFT JOIN region ON region.id = ads.id_region
      LEFT JOIN country ON country.id = ads.id_country      
            
  
   LIMIT 0,10 GROUP BY ads.id"; 



Неработает.
...
Рейтинг: 0 / 0
08.08.2013, 22:27:37
    #38360259
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
paha4444,

а что пишет? :)
...
Рейтинг: 0 / 0
08.08.2013, 22:33:19
    #38360263
paha4444
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
Все, сделал!

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
  $q="SELECT ads.id,
             country.name as country_name,
             region.name as region_name,
             rayon.name as rayon_name,
             m_r.name as m_r_name,
             i_ads.image_path as image_path
             
  
      FROM ads AS ads   
    

    
      LEFT JOIN image_ads AS i_ads ON i_ads.id_ads = ads.id 


      
      LEFT JOIN micro_rayon AS m_r ON m_r.id = ads.id_micro_rayon
      LEFT JOIN rayon ON rayon.id = ads.id_rayon
      LEFT JOIN region ON region.id = ads.id_region
      LEFT JOIN country ON country.id = ads.id_country      
            
  
   GROUP BY ads.id LIMIT 0,10"; 



Надо было добавить в SELECT ads.id, и внизу перед LIMIT GROUP BY ads.id
...
Рейтинг: 0 / 0
08.08.2013, 22:36:37
    #38360269
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
paha4444,

нет "не всё". При группировке, если не указан агрегат, Мускуль выберет "первый попавшийся", что потом легко выйдет вам "боком".

Уж будьте так добры, перечитайте вторую часть совета: поставьте выборку Min() или MAX() идента картинки. А ежели, остальные таблички могут тоже выдать "больше одной записи", то и к ихним полям надо прилепить агрегатные функции. Иначе, вам на зачете - ручки пообрывают. И правильно сделают.
...
Рейтинг: 0 / 0
08.08.2013, 22:43:18
    #38360273
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос. / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]