Нужна помощь с запросом

Panchous

Павел
Нужна помощь с запросом

Имеем: 2 связанные таблицы.
1. Товары (tov_id, name)
2. Фотки товаров (img_id, tov_id, image)

Необходимо вывести все товары так, чтобы для каждого была выбрано одна картинка.
Т.е. нужно получить строки вида: tov_id, tov_name, tov_image
(выбрать 1 картинку для товара)

Это можно решить одним запросом?

Помогите, плз...

____
Забыл добавить: MySQL 4.0.x
 

svetasmirnova

маленький монстрик
[sql]
select tov_id, name as tov_name, image as tov_image from tov join images using (tov_id);
[/sql]
?
 

tf

крылья рулят
или так
PHP:
SELECT t.tov_id,t.name,f.tov_image  FROM  Товары t, Фотки f WHERE t.tov_id=f.tov_id
 

alpine

Новичок
Panchous
Ну так в чем конкретно проблема написать запрос используя JOIN и GROUP BY?
 

Panchous

Павел
проблема в том, что мне нужно следующее:
для каждого товара выбрать ОДНУ КАРТИНКУ

svetasmirnova, tf
Ваши решения возвращают товары СО ВСЕМИ ЕГО КАРТИНКАМИ, а мне нужно выбрать одну картинку для товара

Есть идеи?
 

tf

крылья рулят
Автор оригинала: Panchous
Ваши решения возвращают товары СО ВСЕМИ ЕГО КАРТИНКАМИ, а мне нужно выбрать одну картинку для товара

Есть идеи?
идея первая:
какую именно картинку?)
 

Panchous

Павел
1. упорядочить картинки по img_id
2. вывести список товаров с их первой картинкой

задача всем ясна?)
 

svetasmirnova

маленький монстрик
alpine
угу =)
все товары =)))
Panchous
group by tov_id или даже distinct

-~{}~ 19.09.05 16:38:

group by tov_id order by img_id
 

python

Новичок
можно так (если нигде не обшипся)
[sql]
select i.tov_id, t.name, i.image
from images as i,
(select tov_id, max(img_id) as max_img_id
from images group by tov_id) as max_img,
tovars as t
where
i.tov_id = max_img.tov_id
and i.img_id = max_img.max_img_id
and t.tov_id = i.tov_id
[/sql]
 

tf

крылья рулят
Автор оригинала: Panchous
1. упорядочить картинки по img_id
2. вывести список товаров с их первой картинкой

задача всем ясна?)
ну как работает?
вродебы и добавть даже нечего(
svetasmirnova все объяснила
 

ТопольМ

Новичок со стажем
а если что-то типа такого?

SELECT t.tov_id, t.name, f.tov_image FROM Товары t, Фотки f WHERE t.tov_id IN
(SELECT TOP 1 tov_id FROM Фотки )
 

Panchous

Павел
python, ТопольМ
сорри, забыл сказать:MySQL 4.0.x
вложенные запросы не прокатят (

что делать?
возможно ли решить задачу JOIN'ами?
 

python

Новичок
Panchous
имхо, нафига нужна "какая-то" картинка?. может быть стоит сделать для картинки флаг is_primary и выводить именно её?

-~{}~ 19.09.05 16:56:

можно через временные таблицы... :)
 

tf

крылья рулят
Автор оригинала: ТопольМ
а если что-то типа такого?

SELECT t.tov_id, t.name, f.tov_image FROM Товары t, Фотки f WHERE t.tov_id IN
(SELECT TOP 1 tov_id FROM Фотки )
зачем же так зверствовать
оно и вполне мирно работать должна
PHP:
SELECT t.tov_id,t.name,f.tov_image  FROM  Товары t, Фотки f WHERE t.tov_id=f.tov_id GROUP BY f.tov_id order by f.img_id
или даже distinct
 

Panchous

Павел
tf, работает! спасибо!

python, скорее всего так и сделаю,
т.к. это была ТОЛЬКО ЧАСТЬ ЗАПРОСА)))))
(нужно сортировать товары и еще выводить данные из связанной таблицы - производителя)

теперь, пусть будет так - 3 таблицы имеем:
Товары (t.id, t.name, t.pid),
КартинкиТоваров (i.id, i.tid, i.image, i.primary),
Производитель (p.id, p.name)

Как вывести список товаров с именами производителей и картинкой (той, для которой стоит флаг primary = 1)???
 
Сверху