簡體   English   中英

加入無法在php mysql中工作

[英]JOIN not working in php mysql

我正在使用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張桌子是:

場所

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

establishments_accommodations

1   id    
2   establishment_id    
3   accommodation_id

establishments_facilities

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注入的影響,因此最好使用預處理語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM