簡體   English   中英

使用聯接的MySQL查詢搜索

[英]MySQL query search using joins

我有以下表格:

products table
-------------
id
name
...

categories table
----------------
id
name

product_categories table
------------------------
product_id
category_id

product_ratings
---------------
product_id
user_id
rating (1 to 5 INT)

如何選擇按類別(名稱或ID)選擇(搜索)產品和等級(平均),並按標題或等級排序。

我已經嘗試了一些查詢,但是即時通訊在如何聯接表以及如何使用where子句方面遇到了一些麻煩

你的意思是那樣嗎?

select
    products.name, categories.name, product_ratings.rating
from products
join product_categories on products.id = product_categories.product_id
join categories on  categories.id = product_categories.category_id
join product_ratings on product_ratings.product_id = products.id
where
    categories.name = 'CATEGORY NAME'
order by
    product_ratings.rating
select p.name, r.rating
from products as p
inner join product_ratings as  r on p.id = r.product_id
inner join categories as c on c.id = pc.category_id
inner join product_categories as pc = pc.product_id = p.id
where c.name = 'search_name'
order by r.rating;

方法1

按產品和用戶ID評分

SELECT
P.name, PR.user_id , IFNULL(PR.rating,0) as rating
FROM products P
JOIN product_categories PC ON P.id = PC.product_id
JOIN categories C ON C.id = PC.category_id
JOIN product_ratings PR ON PR.product_id = P.id
WHERE C.name = 'Category A'
ORDER BY P.name

請參閱http://sqlfiddle.com/#!9/014af/6

方法二

按產品編號評分

不同的用戶會對同一產品進行評分,因此我們必須考慮每種產品的平均評分。

SELECT
P.name, GROUP_CONCAT(PR.user_id) as user_ids, AVG(IFNULL(PR.rating,0)) as rating
FROM products P
JOIN product_categories PC ON P.id = PC.product_id
JOIN categories C ON C.id = PC.category_id
JOIN product_ratings PR ON PR.product_id = P.id
WHERE C.name = 'Category A'
GROUP BY P.id 
ORDER BY P.name

請參閱http://sqlfiddle.com/#!9/014af/7

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM