Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MYSQL基于另一个表选择查询多个值_Php_Mysql_Laravel - Fatal编程技术网

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 |
+---------+