我的mysql数据库结构如下所示
产品表
+----+--------+-------------+-------+
| id | itemid | title | price |
+----+--------+-------------+-------+
| 1 | 1 | Dell XPS 10 | 1000 |
| 2 | 1 | Dell XPS 13 | 1100 |
| 3 | 1 | HP 1 | 1100 |
+----+--------+-------------+-------+
项目表
+----+-------------+
| id | description |
+----+-------------+
| 1 | Laptop |
| 2 | Monitors |
+----+-------------+
参数表
+----+--------+------------------+
| id | itemid | description |
+----+--------+------------------+
| 1 | 1 | Brand |
| 2 | 1 | Series |
| 3 | 1 | Color |
| 4 | 1 | Operating System |
+----+--------+------------------+
规格表
+----+-----------+-------------+-------------+
| id | productid | parameterid | description |
+----+-----------+-------------+-------------+
| 1 | 1 | 1 | Dell |
| 2 | 1 | 2 | XPS |
| 3 | 1 | 3 | Red |
| 4 | 1 | 4 | Windows 10 |
| 5 | 2 | 1 | Dell |
| 6 | 2 | 2 | XPS |
| 7 | 2 | 3 | Black |
| 8 | 2 | 4 | Windows 7 |
| 9 | 3 | 1 | HP |
| 10 | 3 | 2 | 1 |
| 11 | 3 | 3 | Black |
| 12 | 3 | 4 | Windows 10 |
+----+-----------+-------------+-------------+
我想尝试以下结果
+----+-----------+-------------+-------+-----------------+----------------------+--------------------------+
| id | productid | title | price | itemdescription | parameterdescription | specificationdescription |
+----+-----------+-------------+-------+-----------------+----------------------+--------------------------+
| 1 | 1 | Dell XPS 10 | 1000 | Laptop | Brand | Dell |
| 1 | 1 | Dell XPS 10 | 1000 | Laptop | Series | XPS |
+----+-----------+-------------+-------+-----------------+----------------------+--------------------------+
而不是我得到
+----+-----------+-------------+-------+-----------------+----------------------+--------------------------+
| id | productid | title | price | itemdescription | parameterdescription | specificationdescription |
+----+-----------+-------------+-------+-----------------+----------------------+--------------------------+
| 1 | 1 | Dell XPS 10 | 1000 | Laptop | Brand | Dell |
| 1 | 1 | Dell XPS 10 | 1000 | Laptop | Brand | XPS |
| 1 | 1 | Dell XPS 10 | 1000 | Laptop | Brand | Red |
| 1 | 1 | Dell XPS 10 | 1000 | Laptop | Brand | Windows 10 |
+----+-----------+-------------+-------+-----------------+----------------------+--------------------------+
我正在使用以下mysql查询
SELECT products.title, products.price, items.description, parameters.description, specifications.description
FROM products
LEFT JOIN items ON products.itemid = items.id
LEFT JOIN parameters ON parameters.itemid = items.id
LEFT JOIN specifications ON specifications.productid = products.id
LIMIT 0 , 30
其次是可以拥有所有参数&同一行列出的规格?
+----+-----------+-------------+-------+-----------------+--------------------------+--------------------------+--------------------------+
| id | productid | title | price | itemdescription | specificationdescription | specificationdescription | specificationdescription |
+----+-----------+-------------+-------+-----------------+--------------------------+--------------------------+--------------------------+
| 1 | 1 | Dell XPS 10 | 1000 | Laptop | Dell | XPS | Red |
+----+-----------+-------------+-------+-----------------+--------------------------+--------------------------+--------------------------+
如果有人对如何改进数据库结构有任何建议,我愿意接受优化它的想法。感谢
以下是@Shakir答案的输出
+-------------+-------+-------------+------------------+-------------+
| title | price | description | description | description |
+-------------+-------+-------------+------------------+-------------+
| Dell XPS 10 | 1000 | Laptop | Brand | Dell |
| Dell XPS 10 | 1000 | Laptop | Series | Dell |
| Dell XPS 10 | 1000 | Laptop | Color | Dell |
| Dell XPS 10 | 1000 | Laptop | Operating System | Dell |
| Dell XPS 10 | 1000 | Laptop | Screen Size | Dell |
| Dell XPS 10 | 1000 | Laptop | Touchscreen | Dell |
| Dell XPS 10 | 1000 | Laptop | Brand | XPS |
| Dell XPS 10 | 1000 | Laptop | Series | XPS |
| Dell XPS 10 | 1000 | Laptop | Color | XPS |
| Dell XPS 10 | 1000 | Laptop | Operating System | XPS |
| Dell XPS 10 | 1000 | Laptop | Screen Size | XPS |
| Dell XPS 10 | 1000 | Laptop | Touchscreen | XPS |
| Dell XPS 10 | 1000 | Laptop | Brand | Black |
| Dell XPS 10 | 1000 | Laptop | Series | Black |
| Dell XPS 10 | 1000 | Laptop | Color | Black |
| Dell XPS 10 | 1000 | Laptop | Operating System | Black |
| Dell XPS 10 | 1000 | Laptop | Screen Size | Black |
| Dell XPS 10 | 1000 | Laptop | Touchscreen | Black |
| Dell XPS 10 | 1000 | Laptop | Brand | Windows 10 |
| Dell XPS 10 | 1000 | Laptop | Series | Windows 10 |
| Dell XPS 10 | 1000 | Laptop | Color | Windows 10 |
| Dell XPS 10 | 1000 | Laptop | Operating System | Windows 10 |
| Dell XPS 10 | 1000 | Laptop | Screen Size | Windows 10 |
| Dell XPS 10 | 1000 | Laptop | Touchscreen | Windows 10 |
+-------------+-------+-------------+------------------+-------------+
答案 0 :(得分:0)
试试这个并显示结果
SELECT products.title, products.price, items.description,
parameters.description, specifications.description
FROM products
INNER JOIN items ON products.itemid = items.id
INNER JOIN parameters ON parameters.itemid = items.id
INNER JOIN specifications ON specifications.productid = products.id
LIMIT 0 , 30
答案 1 :(得分:0)
试试这个,看它是否有效。
SELECT
products.title,
products.price,
items.description,
(
SELECT
GROUP_CONCAT(spec.description SEPARATOR ' ')
FROM specifications as spec
WHERE spec.productid = products.id
GROUP BY spec.productid
) AS `specificationdescription`
FROM products
INNER JOIN items ON products.itemid = items.id
LIMIT 0 , 30