Как отсортировать порядок LEFT JOIN (несколько таблиц) в запросе SQL? - PullRequest
0 голосов
/ 16 мая 2019

Нашел пост очень симулированный пост, к которому я после. как отсортировать порядок LEFT JOIN в запросе SQL? , но моя разбита по нескольким таблицам.

Accounts
acc_id | salesRank | reg_date
1      | 50        | 2018-01-01 07:01:01
2      | 20        | 2019-02-01 07:01:01

Catalogue
cat_id | product_name | brand   
1      | torch        | Dewalt  
2      | MacBook      | Apple  
3      | Phone        | Samsung

Inventory
inv_id | cat_id | acc_id | salePrice | stock
1      | 1      | 1      | 999       | 6
2      | 1      | 2      | 499       | 2

Вот что мне нужно далеко:

 SELECT c.cat_id, c.product_name, c.brand, a.salePrice,
 MATCH(c.product_name) AGAINST('+dewalt' IN BOOLEAN MODE) AS relevancy, 
 (a.salesRank + i.stock) AS sellersRankTotal 
 FROM catalogue AS c
JOIN inventory AS i ON c.cat_id = i.cat_id
JOIN accounts AS a ON i.acc_id = a.acc_id

WHERE ... GROUP BY c.cat_id ORDER BY relevancy DESC

Я знаю, как получить MAX () sellersRank из двух значений в двух таблицах вместе взятых.

Результаты, которые я получаю после того, как продавец с самым высоким рейтингом (salesrank + акции) получают цену, показанную в результатах поиска.

 product_name | brand  | acc_id | cat_id | price | sellersRankTotal
 torch        | Dewalt | 1      | 1      | 999   | 56 (SalesRank + Stock)

Я могу только предположить, что у Amazon аналогичная концепция. Указанные цены не всегда самые дешевые, но продавцы со степенью ранжирования указывают цены в своих списках.

Надеюсь, это имеет смысл, Привет

1 Ответ

0 голосов
/ 16 мая 2019

Звучит так, будто вы просто хотите по-другому управлять порядком сортировки, хотя я не уверен на 100%, имели ли вы ввиду, что sellersRankTotal и релевантность каким-либо образом комбинируются. Неважно, сколько у вас исходных таблиц. Если они объединены в новое отношение, вы можете отсортировать по любому столбцу, являющемуся частью этого набора результатов (или по любому выражению, которое вы можете использовать для создания вычисляемого столбца).

Если вы просто хотите упорядочить по «a.salesRank + i.stock» (выражение, которому вы дали псевдоним sellersRankTotal), просто добавьте этот порядок по предложению (при условии, что вы хотите отсортировать сначала по релевантности а затем по продавцамRankTotal):

SELECT c.cat_id, c.product_name, c.brand, a.salePrice,
MATCH(c.product_name) AGAINST('+dewalt' IN BOOLEAN MODE) AS relevancy, 
(a.salesRank + i.stock) AS sellersRankTotal 
FROM catalogue AS c
JOIN inventory AS i ON c.cat_id = i.cat_id
JOIN accounts AS a ON i.acc_id = a.acc_id

WHERE ... GROUP BY c.cat_id ORDER BY relevancy DESC, sellersRankTotal DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...