Php MYSQL基于另一个表选择查询多个值
我有两张桌子,一张是单元桌,一张是设施桌Php MYSQL基于另一个表选择查询多个值,php,mysql,laravel,Php,Mysql,Laravel,我有两张桌子,一张是单元桌,一张是设施桌 Table units +---------+---------------------+---------------------+-----------+----------+ | unit_id | date added | date modified | unit name | user | +---------+---------------------+---------------------+----
Table units
+---------+---------------------+---------------------+-----------+----------+
| unit_id | date added | date modified | unit name | user |
+---------+---------------------+---------------------+-----------+----------+
| 1 | 2001-10-29 13:11:00 | 2001-10-29 13:11:00 | Villa 1 | Smith |
| 2 | 2001-10-29 13:11:00 | 2001-10-29 13:11:00 | Villa 2 | Smith |
| 3 | 2001-10-29 13:11:00 | 2001-10-29 13:11:00 | Villa 3 | Jones |
| 4 | 2001-10-29 13:11:00 | 2001-10-29 13:11:00 | Apartment | Smith |
+---------+---------------------+---------------------+-----------+----------+
Table Amenities
+---------+-----------+-------------------+
| id | Unit_id | Amenity |
+---------+-----------+-------------------+
| 1 | 1 | Air conditions |
| 2 | 1 | Internet |
| 3 | 1 | Water heaters |
| 4 | 1 | TV |
| 5 | 2 | TV |
| 6 | 2 | pool |
| 7 | 2 | Internet |
| 8 | 3 | Internet |
| 9 | 4 | Internet |
+---------+-----------+-------------------+
我想选择既有电视又有互联网的单元
我试着
select units.* from units left join Amenities on units.unit_id=Amenities.Unit_id
where Amenities.Amenity='TV' and Amenities.Amenity='Internet'
但不起作用
SELECT ua.*
FROM units AS ua
INNER JOIN units AS ub ON ua.unit_id = ub.unit_id
INNER JOIN Amenities AS aa
ON ua.unit_id = aa.Unit_id
AND aa.Amenity = 'TV'
INNER JOIN Amenities AS ab
ON ub.unit_id = ab.Unit_id
AND ab.Amenity = 'Internet';
以下是使用您的数据生成的输出:
+---------+---------------------+---------------------+-----------+-------+
| unit_id | date added | date modified | unit name | user |
+---------+---------------------+---------------------+-----------+-------+
| 1 | 2001-10-29 13:11:00 | 2001-10-29 13:11:00 | Villa 1 | Smith |
| 2 | 2001-10-29 13:11:00 | 2001-10-29 13:11:00 | Villa 2 | Smith |
+---------+---------------------+---------------------+-----------+-------+
显然,你永远不会有一张像你描述的那样的桌子。相反,您将有一个单位表,一个设施表,以及一个说明哪些设施属于哪个单位的表。此查询产生了什么错误?返回空字符串,而它应该返回给单位您正在传递的
和子句是ydo或那里,您到底想要什么?一个既有舒适性又有舒适性的单元?@Wodin-是-或者如果你想找到三分之二的单元。我同意最好有一个Amenties
表,它只有amentity\u id
和amentity
列,然后是一个带有unit\u id
和amentity\u id
的链接表。然后,便利设施
只会有一个记录,例如,互联网
,但单位便利设施
中会有一个记录,每个单位都有互联网
便利设施。@Wodin完全正确。谢谢你的帮助,我发现他的答案是petter
DROP TABLE IF EXISTS amenities;
CREATE TABLE amenities
(unit_id INT NOT NULL
,amenity VARCHAR(50) NOT NULL
,PRIMARY KEY(unit_id,amenity)
);
INSERT INTO amenities VALUES
(1,'Air conditions'),
(1,'Internet'),
(1,'Water heaters'),
(1,'TV'),
(2,'TV'),
(2,'pool'),
(2,'Internet'),
(3,'Internet'),
(4,'Internet');
SELECT unit_id
FROM amenities
WHERE amenity IN ('TV','Internet')
GROUP
BY unit_id
HAVING COUNT(*) = 2;
+---------+
| unit_id |
+---------+
| 1 |
| 2 |
+---------+