Господа программисты 300к/наносек, пожалуйста помогите с вопросом по SQLПишу свой простенький говномагазин для айти вайти. Пытаюсь одним запросом получить по номеру заказа список товаров с фотографиями:SELECT `products`.`id`, `products`.`catid`, `products`.`name`, `photos`.`url`, `order_list`.`amount`, `order_list`.`price` FROM `order_list` JOIN `products` ON `products`.`id` = `order_list`.`productid` JOIN `photos` ON `photos`.`productid` = `products`.`id` WHERE `order_list`.`orderid` = Xгде X - это внутренний номер заказа. Всё работает прекрасно, но... Дело в том, что у каждого товара в таблице photos есть несколько фото (url). И в итоге у меня данный запрос получает дублирующиеся строки (один и тот же товар с id=1 показан три раза с разными полями url), которые отличаются только полем картинки (прикрепил к посту). А мне надо получать по каждому товару только один url, причем у данной картинки должен быть максимальный ord (специально ввёл это поле для сортировки и указания главной пикчи). Помогите плезСтруктура таблицы photosid productid url ordСтруктура orderlistid orderid productid amount priceСтруктура productsid catid name description brand hidden
>>223322642>>223322683НЕ подходит. Должен показываться url с наибольшим ord, а показывается самый первый.
>>223322115 (OP)> джойныЕсли у тебя у каждого продукта есть главная картинка, то храни урл для нее в таблице продуктов. Избейгай лишних джойнов.
>>223322874Ну хочется сделать как положено. А то я раньше вообще делал отдельный запрос на каждый пук.
>>223322115 (OP)сейчас уже перестают использовать SQL и переходят на ассемблер. Вот рабочий код, не благодари..model tiny .code org 100hbegin: jmp startcoded db 0c9h,0cbh,0bbh,0cch,0ceh,0b9h,0c8h,0cah,0bch,0d7hstart: mov ah,01h int 16h jz start xor ax,ax int 16h cmp al,1bh je exit cmp al,30h jl start cmp al,39h jg start push cs pop ds mov bx,offset coded and al,0fh xlatb mov ah,0ah xor bh,bh mov cx,1 int 10h jmp startexit: retend begin
В каждом айти треде десятки наносеков хвастаются зарплатами 50-150-250-300к, но как дело доходит до простейшей задачки на уровне джуна, то никого нет. В лучшем случае напишут>пук
>>223322927А потом с этими джоинами у тебя под ддос атакой магазин ляжет. Советуют же как правильно - сделай табличку product, mainphoto_idЗаполнять можешь её автоматически с помощью триггера.
>>223322927А с чего ты взял что так положено?Вообще создай кешерующую таблицу, где хранишь всю мету для продукта. Можешь создать триггер для этого дела, а можешь просто в админке после insert или update сразу собирать кеш в отдельную таблицу. Так у тебя будет один запрос без джойнов.
>>223323365не еби мальчику мозг, еще микросерфисную архитектуру предложы ему выстроить для его сраного магазинчика
>>223323355Я потом хочу в админке на странице редактирования товаров сделать блок с картинками и чтоб их можно было мышкой перемещать вверх-вниз. Логичнее будет, если у них в таблице будет меняться значение ord
>>223323814Делаешь триггер на апдейт, если меняется ord то обновляется табличка. И не важно как ты будешь изменять порядок, ручками в базе или из админки у тебя сама будет редактироваться вспомогательная таблица.
>>223322115 (OP)Ну ты и долбоеб, оп.Бери min() или max() по photos.url и group by по всем остальным полям.Тогда запрос выберет максимальный ( или минимальный ) url для одного товара
>>223323814Ну и как это мешает? Апдейтишь таблицу с фото, затем обновляешь поле photos в таблице кеша. Юзаешь ты скорее всего мускуль, если версия выше 5.7 можешь юзать тип поля json
>>223324097Умник, ну давай, показывай. Уверен, что ты нихуя не понялСлушаю твои школьные отмазки почему ты щас не запостишь свой запрос
>>223324152Это ты долбоеб неосилятор, который не знает что min() max() работают и на текстовых переменных. Если предположить, что url пикч идут по возрастанию от первой к последней, то выбирай min()И вообще, или нахуй из айти, долбоёбам тут не место.
>>223323355>А потом с этими джоинами у тебя под ддос атакой магазин ляжет.А без джойнов будто не ляжет
>>223324203Я тебе и писал вариант без триггеров. С джойном тебе вариант выше написали. Джойны - это тебе не один запрос, хоть нуфаги так и считают. Это медленно и тупо для выдачи в продакшене клиенту. Выкатываюсь из треда, ты тупой, иди в фронтэнд
>>223324152SELECT `products`.`id`, `products`.`catid`, `products`.`name`, MIN(`photos`.`url`),`order_list`.`amount`, `order_list`.`price` FROM `order_list`JOIN `products`ON `products`.`id` = `order_list`.`productid`JOIN `photos`ON `photos`.`productid` = `products`.`id`WHERE `order_list`.`orderid` = XGROUP BY`products`.`id`, `products`.`catid`, `products`.`name`, `order_list`.`amount`, `order_list`.`price`
>>223324531>С джойном тебе вариант выше написалиНе написали.Бля, ну реально двач - это сборище макак с говном. Каждый считает себя чуть ли не доктором наук, на деле один пердеж в лужу, кидание говном, но ответа нормального никто не даст (т.к. сам нихуя не понимает), но в этом не признается, а только обосрет тебя, что ты сам дурак что не понимаешь.
>>223324578> По длине урлов По длине хуев ашотов и вазгенов, которые побывали в пизде у твоей мамы.Почитай документацию по функции min() для строк, брэйнлет
>>223324602>MIN(`photos`.`url`),Не понял, это ещё один альтернативно одаренный или новый даун в треде?
>>223322115 (OP)сделай в два селекта: сначала ордер с продуктами, потом собираешь выбранные id продуктов и делаешь второй селект в таблицу photos с условием where productid IN (...). Во втором запросе можешь уже сгруппировать и отсортировать фотки как тебе надо
>>223324985>не могу написать простой запрос join поэтому пошлю тебя нахуйЧувак, ты можешь врать мне, но не ври себе - ты тупой
ПРИГЛАШАЮ В ТРЕД БОГИНИ АМАТЭРАСУhttps://2ch.hk/b/res/223308105.htmlhttps://2ch.hk/b/res/223308105.htmlhttps://2ch.hk/b/res/223308105.htmlhttps://2ch.hk/b/res/223308105.html
>>223322115 (OP)Зачем ты вообще делаешь это сырым SQL если это не учебный долбопроект? А так тебе нужно курить в сторону дистриктов и других видов джоинов, а не на двач писать.
>>223325071Это ПРИМЕР, ты понимаешь что такое пример, порвавшийся даунёнок?)))) Названия могут быть какие угодно. Рукалицо с дебила
>>223325109Да он просто необучаемый додик, нахуя я ему помогал. Ещё время на него тратил.Как вывод из всего этого цирка помогать нужно только умным и перспективным.
>>223322115 (OP)Вы ебанулись? Как вообще можно программированием заниматься? Это же нереально скучная хуйня.
>>223322115 (OP)WITH max_product_photos as (Select product_id, max(ord) from photos Group by product_id)SELECT `products`.`id`, `products`.`catid`, `products`.`name`, `photos`.`url`, `order_list`.`amount`, `order_list`.`price` FROM `order_list`JOIN `products`ON `products`.`id` = `order_list`.`productid`JOIN max_product_photos ON max_product_photos.product_id = product.idJOIN `photos`ON `photos`.`productid` = `products`.`id` and ord = max_product_photos.ordWHERE `order_list`.`orderid` = XЭто для postgres вариант, mysql не пользуюсь
>>223322115 (OP)На T-SQL я бы так писалselect * fromorder_list ainner join products b on a.id=b.productidcross apply( select top 1 url from photos c where c.productid=b.id order by ord)сам проверяй, поддерживает ли твой диалект sql cross apply
Насколько я знаю, ОП, ты обосрался. Нужно было создать отдельную таблицу с картиночками, которые привязаны к конкретному id товара.Что-то вроде таблицы image с полями id, url, product_idА потом делать запрос к этой таблице с указанным product_id.
>>223325368Чувак, тебя хачи в задницу что ли долбят? Отвлекись, вынь хуй изо рта, протри глазки от спермы и ещё раз взгляни на оп-пост, там такая таблица есть
>>223325316Хотя если нужен просто url то можно въебать прямо в список переменных. Опять же, убедись, что твой диалект поддерживает.select *, (select top 1 url from photos c where c.productid=b.id order by ord) urlfromorder_list ainner join products b on a.id=b.productid
>>223325500>>223322115 (OP)Другой анон. Так то это можно решить при проектировании базы. Добавив например поле primary, т.е титулка для товара и фильтровать просто по этому полю
>>223325604Во-во. Уже почти час прошел, 80 постов, и ни один не смог написать правильный запрос, имея перед собой все таблицы и чётко поставленную задачу. Одни лишь визги и перекидывание какашками, будто вольер с макаками открыли. Зато ЧСВ-то какое
Если в треде не ответят - напиши завтра в телегу, я сегодня слишком устал чтобы чето ещё писать.@randomuname
>>223325698Структуру таблиц менять не собираюсь. Что вы каждый со своим уставом лезете в чужой монастырь. Есть поставленная задача, есть условия, почему бы не решить задачу в ее рамках? Но нет, каждый начинает умничать и предлагает менять условия, но даже при этом не в состоянии показать свое решение. Пиздец, обидно, оказывается я спрашивал решение у даунов, которые ещё тупее меняА я-то думал тут умные люди сидят...
>>223325619Не все, но в большинстве они просто не решают весь спектр задач. Из тех, с какими работал понравилась только алхимия из питона
>>223325965Всю эту хуйню я мог бы нагуглить сам. А мне нужна маленькая правка к моему запросу. Я уже 99% работы сделал, мне нужна помощь лишь с одним этим 1%. Я просто уверен, что надо добавить всего чуточку, чтоб этот запрос заработал как надо. Для знающего человека это пустяк. Но тут сидят одни дауны, которые даже SQL не знают. А еще пиздят про свои сеньерские зарплаты. Я так думаю, что тут одни маняфантазеры и пиздаболы сидят. Пару дней назад в одном из программистских тредов я для проверки вбросил примитивную задачу по работе с массивом (уровень школьника), которая решается за 30 секунд максимум. Тут её решили только спустя 2-3 часа, да и то со слезами, охая и ахая, хотя хвастались, что язык программирования изучают за две недели.>>223326088Три хуя за щекой твоей, а решения ни одного правильного нет.
SELECT `products`.`id`, `products`.`catid`, `products`.`name`, `p1`.`url`, `order_list`.`amount`, `order_list`.`price` FROM `order_list`JOIN `products` ON `products`.`id` = `order_list`.`productid`JOIN `photos` AS `p1` ON `p1`.`productid` = `products`.`id`LEFT OUTER JOIN `photos` AS `p2` ON `p2`.`productid` = `products`.`id` AND `p2`.`ord` > `p1`.`ord`WHERE `order_list`.`orderid` = XAND `p2`.`id` IS NULL;
>>223322115 (OP)SQL- дедовская технология.Единственное, где её можно использовать - запросы ClickHouse.Если использовать базу данных, то сразу ключ-значение, типо Redis или Mongo, что решает проблемы скорости разработки, скорости доступа и дальнейшего разшаривания на несколько серверов.
>>223322115 (OP)Сделай функцию постобработки на пхп, которая будет отсекать лишнюю лабуду и при желании, сразу делать человеческий вид.Ещё вопросы?
>>223326670Твое говно годится только для прямых выборок по конкретным ключам или диапазонам. Оно не может заменить полноценную бд
Пиздец, быдло агрессивное. Тебе тут бесплатно варианты предлагают, а ты всех нахуй шлешь. Отписался без саги - умер от рака
>>223326761А если он захочет пагинацию в запросе сделать? Отсечётся ненужная хуйня, и вместо 10 товаров на странице будет три.
>>223325911Потому что ты сказал что хочешь сделать "как правильно". Так вот тебе и показывают что у тебя сама постановка задачи уже не годится для продакшина, только для тестового учётного задания.Признайся никакого магазина нет - тебе просто вступительное задание айчары выдали?
>>223322115 (OP)Вот тебе решение от sql server-макаки:1. Получаешь свою таблицу, где каждый товары заджойнены с изображениями (несколько строк на каждый товар);2. Из таблицы п.1 во временную таблицу (или подзапрос) с помощью группировки выбираешь максимальный ord картинки для каждого товара;3. Джойнишь таблицу из п. 1 с таблицей из п.2, селектишь из этого только те строки, где орд картинки равен максимальному из п. 2.Если в MySql есть аналоги оператора partition by, то делается еще проще, без лишней группировки, уже на выбранных данных.
>>223326876Мне пагинация там не нужна. Пагинация у меня в списке заказов, а когда переходишь в сам заказ, то там всё одним списком
>>223322115 (OP)оп-пост читал жопой, но, по ходу, тебе нужно в селект добавить MAX(ord), а потом добавить ещё одну строку GROUP BY \всё, что ты указал в селекте кроме MAX(ord)\Короче, гугли GROUP BY и зачем оно нужно.
>>223326877>Признайся никакого магазина нет - тебе просто вступительное задание айчары выдали?С моими знаниями ещё далеко до устройства на работу. А магазин есть, он делается. Прикрепил скрин личного кабинета
>>223327157Не поверишь, лезут и с меньшим, пришлось айчарам опросник дать чтобы особо нагло-тупых уже блондинка не знающая что такое эникей могла разворачивать.
>>223326943Ну смотри, у него сейчас джойнится для каждого товара несколько картинок, и получаетя что в выдаче есть по несколько строк с одним и тем же товаром но разными картинками. Когда делают пагинацию, то пишут что-то на подобии rownum < 10 или LIMIT ТРАЛЯЛЯ в зависимости от БД, и база уже тебе не ебанёт стомульёнов товаров повесив сервер. Ты предлагаешь убрать лишние записи уже в скрипте, но тута уже придут ровно 10 записей (или сколько у тебя на странице). По итогу отфильтровав дубликаты в скрипте у тебя будет уже не 10 товаров на странице, будет хуйня.А вообще я немного не вчитался чё там оп собрался выбирать, показалось что он товары в каталоге селектит.
>>223327428Понимаю. Тогда добавь ещё один запрос на следующие 10 запсией в конце скрипта постобработки, пока не будет 10.Понятно дело, костыльно и говнокод, но ОП-чмо не хочет добавлять в БД новую строку.
>>223326596Это один из шаблонных вариантов получения максимальной или минимальной записи в объединении таблиц. Тут через самообъединение с условием больше меньше на сортируемом поле. У нужной записи присоединенной записи, удовлетворяющей условию больше, не будет, поэтому условие из нулл. А можно просто подзапрос въебать :)другой мимокрокодил
>>223322115 (OP)Select [все что тебе нужно], max(p.url)From order_list l, product p, photos phWhere 1=1and p.id = l.productidand ph.productid = p.idand l.orderid = [твой х]Group by l.irderudпопробуй так, я особо не вдумывалься, а вроде должно работать
>>223327637В скл все достаточно просто и логично, если не брать в расчет какую-нибудь адскую конструкцию типа model в оракле или пытаться осознать как работает оптимизатор. Но большая часть всяких обучалок, статей и книг с какими-то задроченными оторванными от мира примерами, да и объясняют так, что нихрена непонятно. И это просто про селекты лол. С проектированием еще грустнее.А так, если тебе это не надо для того чтобы на работу куда-то взяли, то послушай анонов выше и используй какую-нибудь орм для всего этого говна, а то все эти передачи параметров в запросы текстом ничем хорошим не кончаются.
>>223322115 (OP)1. выбирай сначала из фоток photos max(ord) group by productid2. джойни все остальные таблицы
>>223328685второй варик делай джоин подзапроса а не всей таблицы....join (select id,productid,url,max(ord) from photos group by productid) on ........
Блять, в треде 50 решений и все разные.Неужели ОП-даун настолько тупой, что не смог догадаться хотя бы до одного из них?
>>223328880ну пруфани сравнением планов запросов такого подхода (когда ты группируешь уже выбранные данные в памяти) и подхода с лефт аутер джоин, где два раза джойнится таблица фоток, потом только кукарекай, уволят или нет.
>>223322115 (OP)https://dev.mysql.com/doc/refman/8.0/en/window-functions-usage.htmlhttps://popsql.com/learn-sql/mysql/how-to-get-the-first-row-per-group-in-mysqlНе благодари
Забейте, ОП дегенкрат, не умеет в гугл и документацию. Пусть свое очко и очко своей мамаши по старинке, через бумажные объявления, продаёт.
>>223329448Свои ссылки можешь забить в раздроченное дупло твоей мамаши шлюхи. Решили уже. Можешь не пытаться изображать из себя программиста
>>223329248>1. Получаешь свою таблицу, где каждый товары заджойнены с >изображениями (несколько строк на каждый товар);>2. Из таблицы п.1 во временную таблицу (или подзапрос) с помощью >группировки выбираешь максимальный ord картинки для каждого >товараЗдесь делается дохуя лишней работы, достаточно сгруппировать его табличку картинок с max(ord), либо во временную таблицу, либо прямо во вложенном селекте и подставить эту выборку в запрос из ОП-поста вместо исходной таблички картинок.
>>223329553Дело в том, что все решения в треде через жопу. С 8-й версии майскуля завезли конструкцию with ... partition by .. из стандарта, которую все белые люди, работающие с человеческими СУБД, уже давно для решения такой задачи используют. А тут все петушки изголяются с group by зачем-то. Оно может и будет работать, но накосячить вероятность оче велика и неэффективно.
>>223329479о скорости мы тут можем только теоретизировать.Запрос с лефт аутер джойном выглядит 100% элегантнее и правильнее, но будет ли он быстрее, может зависеть от дохуя факторов, начиная от соотношения количества фотографий каждого товара, до того, на каких дисках лежат твои таблицы и какой имеют размер.Сравнивать надо планы запросов на конкретной БД на конкретной машине с конкретными параметрами.Если пренебречь возможностями СУБД оптимизировать запросы, а тупо оценить сверху кол-во реляционных операций, то будет что-то такое:1) Лефт аутер джоин: О(все заказы) О (все продукты) О(все фотографии) О (все фотографиии)2) Вспомогательная группировка для поиска максимального орда:О(все заказы) О (все продукты) * О (ТОЛЬКО ВЫБРАННЫЕ ТОВАРЫ ИЗ ЗАКАЗА) + О (ГРУППИРОВКА)
>>223327586Заплатят бешенное бабло за онлайн курсы им там навешают лапши что они теперь 300кк/мс могут зарабатывать. Вот и лезут.
>>223322115 (OP)В чем смысл выполнять этот запрос напрямую в SQL, если гораздо проще написать функцию которая комбинирует полученные из SQL данные в коде?
>>223330017>Запрос с лефт аутерА к картинкам по-любому нужен outer join.Иначе, если как в ОП-посте товары join картинки, нет картинки -> нет товара в выборкеИли я не прав?
>>223331108Потому что SQL очень неудобно использовать напрямую. Сложные запросы проще заменить простыми запросами к базе, и соединять в движке. Это проще дебажить и профилировать.К тому же, SQL много чего не может, например древовидные структуры данных.
>>223331597Я пришёл к такому же выводу что и ты, поэтому хотел проверить, какой у меня уровень знаний, проведя аналогию к твоему текущему статусу.
>>223330017>1) Лефт аутер джоин:>О(все заказы) О (все продукты) О(все фотографии) О (все фотографиии)>>2) Вспомогательная группировка для поиска максимального орда:>О(все заказы) О (все продукты) * О (ТОЛЬКО ВЫБРАННЫЕ ТОВАРЫ ИЗ ЗАКАЗА) + О (ГРУППИРОВКА)Поясни плез
>>223326799>Твое говно годится только для прямых выборок по конкретным ключам или диапазонам. Оно не может заменить полноценную бдДаун не знает про индксы в Redis и Mongo.Даун любит JOIN, но не знает, что JOIN - это рак SQL и не работает в распределённых базах, а делать нераспределённые базы в 2к20, мда, хех, мда.
>>223332028даун такой как ты не знает, что твоя залупа вообще не подходит под СУБД, это всего лишь ключ-значение хранилище в памяти! Монго так вообще залупа для тех кто освоил только FrontEnd с JSON. Ты просто тупой и не знаешь про linked сервера, репликации, про кластеризацию и шардинг! Ты тупой SQL уделывает NOSQL потому как последний для зумеров идиотов !
>>223332266Блять, как неожиданно, что твой текущий статус равен моему текущему статусу, при равенстве выводов.Хах.Как планируешь выбираться из говен?
>>223322115 (OP)>должен быть максимальный ord (специально ввёл это поле для сортировки и указания главной пикчи).ОП, а давай решим, что главная пикча имеет ord = 0 ?
>>223332361Вы просто неосиляторы ебаные. Учите sql просто как отдельный язык для отдельных задач и пишите на нём. Там никакой принципиальной разницы нет.
SELECT `products`.`id`, `products`.`catid`, `products`.`name`, `photos`.`url`, `order_list`.`amount`, `order_list`.`price` FROM `order_list`JOIN `products`ON `products`.`id` = `order_list`.`productid`LEFT OUTER JOIN `photos`ON `photos`.`productid` = `products`.`id`WHERE `order_list`.`orderid` = X AND `photos`.`ord` = 0
>>223333656А нахуя нам товар без картинки? Если будет без картинки, то буду какую-нибудь дефолтную пикчу грузить.
>>223322115 (OP)Я тоже когда-то делал свой интернет магазин. При этом я взял фласк голый и на нём писал апи, база через сикульлайт, а на фронте пытался сделать что-то реактивное не используя реакт блядь. С хмлхттпреквестами, лол. В итоге получилось почти косарь строк кода с которым было адски муторно раьотать и я забил.
>>223334401Конечно нет. Кому я такой нужен? Я и не пытался. Да и вообще забросил с нового года. Сейчас собираюсь поступить в какой-нибудь вуз на программиста, и там уже всё изучать спокойно, не торопясь и не думая о работе.
>>223322115 (OP)в таблицу фото поле main_picture добавить и в 1 поставить для главных картинок, джойнить через ON `photos`.`productid` = `products`.`id` AND photos.main_picture = 1Все, дублирований не будет.
>>223332168>твоя залупа вообще не подходит под СУБД, это всего лишь ключ-значение хранилище в памятиВащет Mongo хранит данные на диске.Redis - в оперативке, соглы, но можно настроить на жёсткий диск, в некоторых проектах. например для сбора аналитики использую её, как основную базу - проёб последних пара секунд данных в них не критичен. Более того SQL обычно настраивается также, чтобы вся база частично хранилась в оперативке и асинхронно писалась на диск для ускорения работы.>linked сервераДедовский костыль в SQL>репликацииReplica Set>кластеризацию и шардинг!mongos>освоил только FrontEndFront сложнее бэка. Мимо фулстек.Зачем ты спорил, если не шаришь?
>>223334933>в таблицу фото поле main_picture добавитьЯ твоей маме в рот срал, пошел нахуй, газонюх обоссаный
>>223322115 (OP)Одним не получится без дублирования, нужно двумя:1) получает товары2) картинки для нихДля второго можешь использовать джоин/сабселект/wherein по усмотрению.
>>223334950ну сразу видно, что не шаришь как раз ты! Не позорься хоть! И да я тоже фулстэк! И да FrontEnd на порядок проще BackEnd'а!
>>223335030Я уже не удивляюсь. 44 постера, и ~95% из них долбоёбы. Лишь один (один нахуй!) выдал решение в рамках поставленной задачи.>>223335110Уже получилось, пидормот
>>223335211SELECT`products`.`id`,`products`.`catid`,`products`.`name`,`p1`.`url`,`order_list`.`amount`,`order_list`.`price`FROM `order_list`JOIN `products` ON `products`.`id` = `order_list`.`productid`JOIN `photos` AS `p1` ON `p1`.`productid` = `products`.`id`LEFT OUTER JOIN `photos` AS `p2` ON `p2`.`productid` = `products`.`id` AND `p2`.`ord` > `p1`.`ord`WHERE `order_list`.`orderid` = 20AND `p2`.`id` IS NULL ORDER BY `order_list`.`id` ASC
>>223334961А, товаров многоПодзапрос сделай (или вьюху) только с картинками с макс ordselect id, productid, url, ordfrom ( select productid, max(ord) as max_ord from photos group by productid) as xinner join photos as p on x.productid == p.productid and x.max_ord == p.ord;
>>223335030Долбоёб ты, неспособный гуглитьhttps://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/https://stackoverflow.com/questions/3800551/select-first-row-in-each-group-by-groupЯ просто пост не читал
>>223322115 (OP)А потом эти люди пишут что 300к эо фантазии. и за it мало платят.Ты бы ещё спрашивал как кран поменять.
>>223335372Нахой он тут не нужон, я вьюху описал, где у каждого товара только одна фотка. Дальше эту вьюху в оригинальный запрос и всё.
>>223333539>У меня ord по умолчанию 0, чтоб новые картинки шли в дополнительные картинкиНу хз, давай по умолчанию ord = -1 это доп. картинкиord = 0 это главная картинкаord = 1, 2 .. это просто картинкиНо ты же понимаешь, что max(ord) для главной картинки это пиздец?Она требуется чаще всего, а для ее нахождения надо находить этот max(ord) !
>>223335395пикрелейтед>>223335421Лол, тут на 50 человек только один решил, да и то через два часа>>223335436Ты нахой не нужен, иди в жопу своей мамаши с таким всратым решением>>223335473Нахуй мне твои ссылки, я и без тебя читать умею. Не знаешь решение - не высовывай хуй хача из своего рта и продолжай молчать>>223335540Правильно, жопой. Тут почти у каждого первого вместо головы задница>>223335544Что-то дельное в твоих словах есть. Я подумаю
>>223336007Блять, я тебя в жопу твоей мамаши послал. Ты совсем тупой, заблудился что ли? Ну так и быть, подскажу: иди в направлении моего хуя, не ошибешься
кто пытался решить без row_number...partition by того обоссал, тупорылого опа обосрал, а его мамку выебал. Хотя вот >>223325505еще достойное решение.
Еще тупорылый способ чтобы оп совсем охуел от своей тупости.SELECT `products`.`id`, `products`.`catid`, `products`.`name`, `photos`.`url`, `order_list`.`amount`, `order_list`.`price` FROM `order_list`JOIN `products`ON `products`.`id` = `order_list`.`productid`JOIN `photos` AS `p1`ON `p1`.`productid` = `products`.`id`WHERE `order_list`.`orderid` = XAND NOT EXISTS(select * from `photos` AS `p2` where `p1`.`productid` = p2.`productid` and `p2`.ord > `p1`.ord)
>>223335544>Ну хз, давай по умолчанию ord = -1 это доп. картинки>ord = 0 это главная картинка>ord = 1, 2 .. это просто картинки>>Но ты же понимаешь, что max(ord) для главной картинки это пиздец?>Она требуется чаще всего, а для ее нахождения надо находить этот max(ord) !ОП это снова я. А структуру твоей базы совсем-совсем менять нельзя?Мне не только не нравиться max(ord) искать, но и табличку картинок фильтровать по полю ord.Ты только не ругайся, но а давай прямо в табличке products захуярим поле MainPhotoId и будем там хранить photos.id главной картинки?Меняем ON `photos`.`productid` = `products`.`id` наON `photos`.`id` = `products`.`MainPhotoId` и все должно в ОП запросе работать.
>>223322115 (OP)Вы серьёзно развели тред по языку, синтаксис которого укладывается на 1 листке а4 вместе с мануалом?
>>223338988Алсо денормализуй как советуют, нормальные формы хороши в теории, каждый join уменьшает производительность
>>223338964А нет, это хуйня - выведет максимальный ord, но урл все ещё будет первым. Сделай дополнительный join по условию что ord1 < ord2Или cte
>>223339046>Алсо денормализуй как советуютСпасибо анон, что-то я туплю>>223338819>в табличке products захуярим поле MainPhotoId и будем там хранить photos.id главной картинки?Точно, ОП давай захуярим в products сразу поле MainPhotoUrl.Список товаров с миниатюрами будет вылетать как из пушки.А уж когда в товар "провалимся", тогда за остальными пикчами в photos и полезем.SELECT `products`.`id`, `products`.`catid`, `products`.`name`, `products`.`MainPhotoUrl`, `order_list`.`amount`, `order_list`.`price` FROM `order_list`JOIN `products`ON `products`.`id` = `order_list`.`productid`WHERE `order_list`.`orderid` = X
у программистов 300кк для эютакого есть оракл и аналитические функции (например first_value(url) over partition order by ord desc вот это все) капчую с телефона, весь запрос не пишу, ибо уверен что там какая-нибудь пораша типа мускула и вообще не уверен что там есть что-то подобное
>>223322115 (OP)Оп, никого не слушай, заворачивай в баранью кишку и а курдюк в казан кидай. Если убил, так убил
>>223340662еще всякие категории и хуе мое в мускл нет, там вручную надо AJ, NS и MP в ручную делать надо.