Сложный sql запрос и группировка

352
05 ноября 2017, 16:40

Есть запрос:

SELECT vr.id as id,ut.name as unit, vr.count AS count, c.articles as articles, c.url as url, c.rating as rating, t.text as text, t.minitext as minitext, t.name as name, c.status_id as status, i.img as img, i.water as water, vr.cost as cost
FROM product c 
 RIGHT JOIN productVariants vr ON vr.product_id = c.id 
 LEFT JOIN product_text t ON c.id = t.product_id  
 LEFT JOIN productImgs i ON vr.id = i.productVariant_id 
 LEFT JOIN productCategory pc ON pc.product_id = c.id 
 LEFT JOIN units_text ut ON c.unit_id = ut.unit_id 
WHERE t.lang_id = ? AND pc.category_id = ? AND t.lang_id = ut.lang_id 
 AND i.number = 1 
    AND vr.main = 1  
ORDER BY vr.cost ASC
LIMIT ?,?

`

Вместо ? значения переменных.

Задача, Выбирать только с одним из productVariants чтобы не использовать поле vr.main

~ то что хотелось бы получить, но увы так не работает

SELECT vr.id as id,ut.name as unit, vr.count AS count, c.articles as articles, c.url as url, c.rating as rating, t.text as text, t.minitext as minitext,t.name as name,c.status_id as status, i.img as img, i.water as water, vr.cost as cost 
FROM product c 
 RIGHT JOIN productVariants vr ON vr.product_id = c.id 
 LEFT JOIN product_text t ON c.id = t.product_id  
 LEFT JOIN productImgs i ON vr.id = i.productVariant_id 
 LEFT JOIN productCategory pc ON pc.product_id = c.id 
 LEFT JOIN units_text ut ON c.unit_id = ut.unit_id 
WHERE t.lang_id = ? AND pc.category_id = ? AND t.lang_id = ut.lang_id 
 AND i.number = 1 
 AND vr.main = 1  
GROUP BY vr.product_id
ORDER BY vr.cost ASC
LIMIT ?,?

Логически правильный порядок связей.

    SELECT vr.id as id,ut.name as unit, vr.count AS `count`, c.articles as articles, c.url as url, c.rating as rating, t.text as text, t.minitext as minitext,t.name as name, c.status_id as status, i.img as img, i.water as water, vr.cost as cost 
FROM `productVariants` vr 
INNER JOIN `product` c ON vr.product_id = c.id 
INNER JOIN product_text t ON c.id = t.product_id 
LEFT JOIN productImgs i ON vr.id = i.productVariant_id 
INNER JOIN productCategory pc ON pc.product_id = c.id 
INNER JOIN units_text ut ON c.unit_id = ut.unit_id 
WHERE t.lang_id = ? AND pc.category_id = ? AND t.lang_id = ut.lang_id AND i.number = 1 AND vr.main = 1 
ORDER BY vr.cost ASC
LIMIT ?,?

Пришёл к

SELECT vr.id as id,ut.name as unit, vr.count AS `count`, c.articles as articles, c.url as url, c.rating as rating, t.text as text, t.minitext as minitext,t.name as name, c.status_id as status, i.img as img, i.water as water, vr.cost as cost 
FROM `productVariants` vr
INNER JOIN `product` c ON vr.product_id = c.id 
INNER JOIN product_text t ON c.id = t.product_id 
INNER JOIN productImgs i ON vr.id = i.productVariant_id 
INNER JOIN productCategory pc ON pc.product_id = c.id 
INNER JOIN units_text ut ON c.unit_id = ut.unit_id 
WHERE t.lang_id = ? AND pc.category_id = ? AND t.lang_id = ut.lang_id AND i.number = 1 AND vr.id = (SELECT id FROM productVariants invr WHERE invr.product_id = c.id LIMIT 0,1) 
ORDER BY vr.cost 
LIMIT ?,?

Но понимаю что ситуация требует мнения сбоку.

READ ALSO
mysql crc32(datetime)

mysql crc32(datetime)

Доброго времени сутокТакой вопрос, datetime имеет размер 8 байт, при использовании crc32(datetime) у нас будет использоваться только половина данных...

272
Вопрос по javac и package

Вопрос по javac и package

У меня есть некий java файл, в нем прописан package - допустим package comya

236
Как работает DataInputStream.readUTF() с Socket

Как работает DataInputStream.readUTF() с Socket

readUTF() будет дожидаться сообщения от другого хоста, останавливая поток, или сразу же будет считывать? Если закрыть входной поток iStreamclose(): 1

306
Цикл while не работает в калькуляторе

Цикл while не работает в калькуляторе

Добрый день, пытаюсь написать консольный калькулятор и не пойму почему не работает циклВот код калькулятора, все работает

350