Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: JOIN
 
 автор: OLi   (18.08.2012 в 18:09)   письмо автору
 
 

Мой запрос выдает 2 одинаковые записи, если установлена связь текущей таблицу с другой по полю image. Т-е если во второй таблице 2 записи - то запрос выдает 2 одинковые записи, отличающиеся только полем image
Как тянуть без повторений?
SELECT  `cars`.`id_cars` ,  `cars`.`price` ,  `cars`.`name` ,  `cars`.`year` ,  `cars_images`.`image` 
FROM (
`cars`
)
LEFT JOIN  `regions` ON  `regions`.`id_region` =  `cars`.`region` 
LEFT JOIN  `cars_colors` ON  `cars_colors`.`id_color` =  `cars`.`color` 
LEFT JOIN  `cars_condition` ON  `cars_condition`.`id_cond` =  `cars`.`condition` 
LEFT JOIN  `transport_caterories` ON  `transport_caterories`.`id_transport` =  `cars`.`category` 
LEFT JOIN  `cars_cat` ON  `cars_cat`.`id_cat` =  `cars`.`cat` 
JOIN  `cars_images` ON  `cars_images`.`id_cars` =  `cars`.`id_cars` 
WHERE  `cars`.`status` =  '1'
ORDER BY  `cars`.`id_cars` DESC 
LIMIT 20

  Ответить  
 
 автор: OLi   (18.08.2012 в 18:17)   письмо автору
 
   для: OLi   (18.08.2012 в 18:09)
 

Т-е на выходе щас так:
: id_cars          price   name    year                  image
1 56000 Toyota Land Cruiser 1991 image.jpg
1 56000 Toyota Land Cruiser 1991 image1.jpg

  Ответить  
 
 автор: Sfinks   (18.08.2012 в 20:27)   письмо автору
 
   для: OLi   (18.08.2012 в 18:09)
 

Либо DISTINCT, но тогда выбирать без поля image:
SELECT DISTINCT `cars`.`id_cars` ,  `cars`.`price` ,  `cars`.`name` ,  `cars`.`year` FROM ...........

Либо GROUP BY, но из image тогда нужно выбрать какое-то одно значение:
SELECT `cars`.`id_cars` ,  `cars`.`price` ,  `cars`.`name` ,  `cars`.`year` , max(`cars_images`.`image`)img  
FROM ( `cars` ) 
LEFT JOIN  `regions` ON  `regions`.`id_region` =  `cars`.`region`  
LEFT JOIN  `cars_colors` ON  `cars_colors`.`id_color` =  `cars`.`color`  
LEFT JOIN  `cars_condition` ON  `cars_condition`.`id_cond` =  `cars`.`condition`  
LEFT JOIN  `transport_caterories` ON  `transport_caterories`.`id_transport` =  `cars`.`category`  
LEFT JOIN  `cars_cat` ON  `cars_cat`.`id_cat` =  `cars`.`cat`  
JOIN  `cars_images` ON  `cars_images`.`id_cars` =  `cars`.`id_cars`  
WHERE  `cars`.`status` =  '1' 
GROUP BY `cars`.`id_cars` ,  `cars`.`price` ,  `cars`.`name` ,  `cars`.`year`
ORDER BY  `cars`.`id_cars` DESC  
LIMIT 20

  Ответить  
 
 автор: Sfinks   (18.08.2012 в 20:31)   письмо автору
 
   для: Sfinks   (18.08.2012 в 20:27)
 

А вообще почему такой странный запрос???
Зачем у вас присоединяются таблицы regions, cars_colors, cars_condition, transport_caterories и cars_cat, если в запросе они не принимают никакого участия???

  Ответить  
 
 автор: OLi   (18.08.2012 в 20:33)   письмо автору
 
   для: Sfinks   (18.08.2012 в 20:31)
 

Как же не принимают? там же связь полей одной таблицы с полями другой

  Ответить  
 
 автор: Sfinks   (18.08.2012 в 20:40)   письмо автору
 
   для: OLi   (18.08.2012 в 20:33)
 

И что это дает?
В условиях выборки они участия не принимают.
Запрос:
SELECT C.`id_cars`, C.`price`, C.`name`, C.`year`, max(I.`image`)img
FROM `cars` C
JOIN `cars_images` I ON I.`id_cars` = C.`id_cars` AND C.`status` = '1'
GROUP BY C.`id_cars`, C.`price`, C.`name`, C.`year`
ORDER BY C.`id_cars` DESC   
LIMIT 20
даст тот же самый результат. Можете проверить.

  Ответить  
 
 автор: OLi   (18.08.2012 в 20:32)   письмо автору
 
   для: Sfinks   (18.08.2012 в 20:27)
 

Почему убрали image в
SELECT DISTINCT `cars`.`id_cars` ,  `cars`.`price` ,  `cars`.`name` ,  `cars`.`year` FROM

  Ответить  
 
 автор: OLi   (18.08.2012 в 20:34)   письмо автору
 
   для: OLi   (18.08.2012 в 20:32)
 

DISTINCT не сработал

  Ответить  
 
 автор: Sfinks   (18.08.2012 в 20:35)   письмо автору
 
   для: OLi   (18.08.2012 в 20:32)
 

потому что DISTINCT - значит выбирать только уникальные строки. Если image оставить, то каждая из двух строк будет уникальна. Следовательно ничего не изменится и в выборке так и останется 2 строки.

  Ответить  
 
 автор: OLi   (18.08.2012 в 20:38)   письмо автору
 
   для: Sfinks   (18.08.2012 в 20:35)
 

Хорошо, давайте этот весь хлам упростим, до уровня JOIN cars_images, так чтобы я на выходе получил все поля первой таблицы cars и поля соответствия cars.image=cars_images.id_car и без повторений из cars, в случае, если записей в cars_images больше 1

  Ответить  
 
 автор: Sfinks   (18.08.2012 в 20:42)   письмо автору
 
   для: OLi   (18.08.2012 в 20:38)
 

см.выше

  Ответить  
 
 автор: OLi   (18.08.2012 в 20:56)   письмо автору
 
   для: Sfinks   (18.08.2012 в 20:42)
 

Не сработало так как вы написали

Либо GROUP BY, но из image тогда нужно выбрать какое-то одно значение: - МНЕ ВСЕ ЗНАЧЕНИЯ НАДО ВЫБРАТЬ

  Ответить  
 
 автор: Sfinks   (18.08.2012 в 21:28)   письмо автору
 
   для: OLi   (18.08.2012 в 20:56)
 

> Не сработало так как вы написали
В чем заключается "не сработало"?

> МНЕ ВСЕ ЗНАЧЕНИЯ НАДО ВЫБРАТЬ
Это в принципе не возможно, чтобы первые четыре столбца не повторялись, а в пятом были все значения разные!
Если вы себе представляете, как должна выглядеть результирующая таблица, нарисуйте ее. Тогда попробую написать запрос.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования