php - JOIN 在 php mysql 中不起作用

标签 php mysql join

我正在开发一个使用 PHP 和 MySQL 的项目。我正在尝试运行 SQL 查询,需要从 5 个表中获取数据。我的查询出现错误。

$value = json_decode(file_get_contents('php://input'));

$estId = $value->estId;

$sql = 'SELECT establishments.id, establishments.name, 
               establishments.stay_value, establishments.latitude, 
               establishments.longitude, establishments.description,
               establishments.address,
               facilities.id, facilities.name,
               accomodations.id,accomodations.name
        FROM establishments
        INNER JOIN (establishments_facilities
                    INNER JOIN facilities
                    ON establishments_facilty.facility_id = facilities.id) 
        ON establishments.id = establishments_facility.id
        INNER JOIN (establishments_accommodations
                    INNER JOIN accommodations
                    ON establishments_accommodations.accommodation_d = accomodations.id)      
        WHERE establishments.id ="'.$estId .'" ';

$result = $conn->query($sql);
if($result->num_rows>0){
    while($row = $result->fetch_assoc()){
        $json_obj = $row;
    }
    $json_obj['success'] = true;
    echo json_encode($json_obj);
}

我的 5 张 table 是:

机构

1   id    
2   user_id    
3   name    
4   logo    
5   description    
6   email    
7   latitude    
8   longitude    
9   stay_value

住宿

1   id    
2   name

设施

1   id    
2   name

机构住宿

1   id    
2   establishment_id    
3   accommodation_id

机构设施

1   id    
2   establishment_id    
3   facility_id

任何帮助将不胜感激。

最佳答案

您编写的查询很难阅读,您应该使用别名以获得更好的可读性,而且连接语法看起来不正确,这是具有正确别名的查询

SELECT 
e.id, 
e.name, 
e.stay_value, 
e.latitude, 
e.longitude, 
e.description,
e.address,
f.id, 
f.name,
a.id,
a.name
FROM establishments e 
INNER JOIN establishments_facilities ef on e.id = ef.id
INNER JOIN facilities f ON ef.facility_id = f.id          
INNER JOIN establishments_accommodations ea on ea.establishment_id = ef.establishment_id
INNER JOIN accommodations a ON ea.accommodation_d = a.id      
WHERE e.id ={some value}

现在在 PHP 中你可能会有这样的东西

$sql = "
SELECT 
e.id, 
e.name, 
e.stay_value, 
e.latitude, 
e.longitude, 
e.description,
e.address,
f.id, 
f.name,
a.id,
a.name
FROM establishments e 
INNER JOIN establishments_facilities ef on e.id = ef.id
INNER JOIN facilities f ON ef.facility_id = f.id          
INNER JOIN establishments_accommodations ea on ea.establishment_id = ef.establishment_id
INNER JOIN accommodations a ON ea.accommodation_d = a.id      
where e.id = '".$estId."'";

请注意,where e.id = '".$estId."'" 容易受到 sq 注入(inject)的攻击,因此最好使用准备好的语句。

关于php - JOIN 在 php mysql 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30616267/

相关文章:

mysql - 我的多边形是否正确插入到数据库中?

sql - 使用 JOIN 和限制构建 SQL 查询

php - _frontendCSRF cookie 似乎容易受到 SQL 注入(inject)攻击

php - 尝试使用php编辑/删除sql数据库上的记录

mysql - 我如何构造在 MySQL 数据库中链接在一起的一堆项目?

MySQL Query Join 从两个表中选择不匹配的行

Codeigniter表联接

javascript - 返回 JSON 响应

php - 将 MySQL JOIN 查询转换为 CodeIgniter 查询

java - 本地时区存储在 MySQL 中的 Spring Boot JPA 时间