【发布时间】:2023-03-06 03:34:01
【问题描述】:
我正在尝试学习一些(高级或更复杂的)SQL。
假设我有一张汽车表,其中包含每辆车的信息。
然后我有另一张桌子,上面有正在出售的汽车,有些是新的,有些是二手的。
我希望用户能够查找汽车(例如 Honda civic 2016)并查看汽车信息。
但也希望用户查看所有本田思域 2016 款汽车的销售情况,包括该特定年份/型号的最高和最低价格,按新车和二手分类。
检索所有信息的最有效方法是什么 - 汽车信息和正在出售的信息以显示在页面上!
这些是我的桌子。
CREATE TABLE Users(
id BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(16) NOT NULL,
last VARCHAR(16) NOT NULL,
email VARCHAR(128) NOT NULL,
phone CHAR(10) NOT NULL,
joined DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE Cars(
id BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
make VARCHAR(32) NOT NULL,
model VARCHAR(32) NOT NULL,
year INT(4) NOT NULL,
trim VARCHAR(16) NOT NULL
);
CREATE TABLE Market(
id BIGINT(20) NOT NULL AUTO_INCREMENT,
user_id BIGINT(20) NOT NULL,
car_id BIGINT(20) NOT NULL,
condition VARCHAR(5) NOT NULL,
notes VARCHAR(1024) NOT NULL,
PRIMARY KEY(id),
CONSTRAINT cfk FOREIGN KEY (car_id) REFERENCES cars(id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT ufk FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ON UPDATE CASCADE
);
对我来说,它看起来是多余的,而且随着桌子变大,它注定会变慢。因此,如果有人向我展示更好的方法,我将不胜感激。
/* Get car information*/
SELECT *
FROM Cars
WHERE make = 'Honda'
AND model = 'Civic'
AND year = '2017'
AND trim = 'EX';
/* I also would like to get the min and max price for this particular car*/
/* ?? How ?? */
/* Get (new) cars being sold and sellers */
SELECT M.*, U.*
FROM Market M
INNER JOIN Users ON M.user_id = U.id
WHERE make = 'Honda'
AND model = 'Civic'
AND year = '2017'
AND color = 'white'
AND trim = 'EX'
AND condition = 'NEW';
/* Get (used) cars being sold and sellers */
SELECT M.*, U.*
FROM Market M
INNER JOIN Users ON M.user_id = U.id
WHERE make = 'Honda'
AND model = 'Civic'
AND year = '2017'
AND color = 'white'
AND trim = 'EX'
AND condition = 'USED';
我最终希望使用 PHP 获得类似以下内容:
{
car: {
make: "Honda",
model: "Civic",
year: 2017,
trim: "EX"
},
market: {
new: {
min: 'overall min',
max: 'overall max',
data: [{
seller:{
name: "John",
last: "Smith",
phone: "xxx-xxx-xxxx",
email: "email@domain.com",
},
car: {
price: 15000,
color: "white",
condition: "used",
notes: "Some notes about the car"
}
}]
},
used: {
min: 'overall min',
max: 'overall max',
data: [{
seller:{
name: "John",
last: "Smith",
phone: "xxx-xxx-xxxx",
email: "email@domain.com",
},
car: {
price: 15000,
color: "white",
condition: "new",
notes: "Some notes about the car"
}
}]
}
}
}
一旦我检索到信息,我就可以输入该格式。此外,我还必须对数据库进行分页。
基本上,我有兴趣了解亚马逊的最佳做法。一件商品从不同的供应商处以不同的价格出售。亚马逊提供有关所售商品的信息;它的状况、价格、卖家等。此外,亚马逊会为您提供最低、最高价格以及有关该商品的一般信息。最好的方法是什么?
【问题讨论】:
-
我想你忘记了
CREATE TABLE Market ...中的price列,明白了你的意思。数据类型DECIMAL (10,2)对于price来说可能是正常的。 -
color也不见了.. -
我很欣赏这些言论,但关注的焦点是性能和实现这一目标的最佳方式。剩下的事情我能应付!
-
非常高兴您找到了您正在寻找的答案!您提供了一个极好的学习机会。这些 cmets 不适合您,而是适合稍后访问该站点以从您提供的问题和答案中受益的其他人。更正的目的是最大程度地减少混淆,并防止未来的访问者在尝试编写示例时重新发明调试轮。这里没有什么私人的!我们都只是想互相帮助。 StackOverflow 是一个很棒的资源——你是其中的一员:)感谢您的贡献!
标签: mysql