我有问题。我是一个编码新手,学习PHP和mysql,因为我去。 我正在处理一个应用程序并遇到了一个我无法弄清楚的问题。
我有三张桌子:
类别:
+-----------+----------+--------------------+ | id | name | sort | active | +-----------+----------+--------------------+ | 1 | apple | 1 | 1 | | 2 | mango | 2 | 1 | | 3 | blueberry| 3 | 0 | +-----------+----------+--------------------+
服务:
+-----------+----------+----------------------------------------+ | id | category_id | name | sort |active| process_time | +-----------+------+------+--------+------+------+--------------+ | 1 | 1 | slices | 1 | 1 | 2 hours | | 2 | 1 | half | 2 | 1 | 6 hours | | 3 | 2 | slices | 1 | 1 | 1 hour | | 4 | 2 | whole | 2 | 1 | 6 hours | | 5 | 3 | bunch | 1 | 0 | 12 hours | | 6 | 3 | a lot | 2 | 1 | 10 hours | +-----------+------+---------+------+-------------+-------------+
user_price:
+-----------+----------+------+-------+---------+---------+---------+---------+ | id | user_id | 1 | 2 | 3 | 4 | 5 | 6 | +-----------+----------+------+-------+---------+---------+---------+---------+ | 1 | 20 | 1 | 1 | 5 | 4 | 6 | 6 | | 2 | 22 | 2 | 1 | 2 | 3 | 5 | 1 | | 3 | 32 | 3 | 2 | 7 | 4 | 1 | 3 | +-----------+----------+------+-------+---------+---------+---------+---------+
类别包含我在商店中销售的类别 服务具有我在商店中提供的服务,它们与类别相对应,并且仅对该类别是唯一的 价格具有我向客户收取的用户价格,每个用户都有不同的价格,价格表中的列名对应于服务ID。
以下是包含示例数据的 SQLFiddle
现在问题是,在一次扫描中,我想得到一行,其中包含来自user_id 22的所有三个表的列(user_id仅用于价格)
+---------------+----------------+-----------------+------------------+-----------+ | service_id | category_name | service_name | process_time | price | +---------------+----------------+-----------------+------------------+-----------+ | 3 | mango | slices | 1 hour | 2 | +---------------+----------------+-----------------+------------------+-----------+
任何想法???
答案 0 :(得分:0)
尝试
SELECT s.id service_id,
c.name category_name,
s.name service_name,
s.process_time,
p.`3` price
FROM service s JOIN category c
ON s.category_id = c.id JOIN user_price p
ON p.user_id = 22
WHERE s.id = 3
输出:
| SERVICE_ID | CATEGORY_NAME | SERVICE_NAME | PROCESS_TIME | PRICE | -------------------------------------------------------------------- | 3 | mango | slices | 1 hour | 2 |
这是 SQLFiddle 演示
现在虽然还不算太晚,但请将user_price table
标准化。从长远来看,这将为您省去很多麻烦。
此表的续订架构可能类似于
CREATE TABLE IF NOT EXISTS user_price
(
id int(11) NOT NULL AUTO_INCREMENT,
user_id int(11) NOT NULL,
service_id int(11) NOT NULL,
price decimal(19,2) DEFAULT '0.00',
PRIMARY KEY (id),
FOREIGN KEY (service_id) REFERENCES service (id),
UNIQUE KEY (user_id, service_id)
);
使用此表的正确查询
SELECT s.id service_id,
c.name category_name,
s.name service_name,
s.process_time,
p.price
FROM service s JOIN category c
ON s.category_id = c.id JOIN user_price p
ON s.id = p.service_id
AND p.user_id = 22
WHERE s.id = 3
这是 SQLFiddle 演示。 在此示例中,表格已命名为user_price1
,以便同时显示两个查询。