2016-01-29 70 views
1

我想加入多個表,讓我解釋一下我的查詢代碼示例更好:多INNER JOIN打破了查詢

if($stmt = $this->db->prepare("SELECT table_users.id AS user_id, table_users.email AS user_email, table_users.GUID as user_guid, " 
     . "table_roles.slug AS role_slug, table_user_settings.username, table_users.id_roles, " 
     . "table_users.first_name, table_users.last_name, table_users.mobile_number, table_users.phone_number, " 
     . "table_users.address, table_users.city, table_users.state, table_users.zip_code, table_users.notes " 
     . "FROM table_users " 
     . "WHERE table_users.data = 0 " 
     . "INNER JOIN table_roles ON table_roles.id = table_users.id_roles " 
     . "INNER JOIN table_user_settings ON table_user_settings.GUID = table_user.GUID " 
     . "WHERE table_user_settings.username = ? " 
     . "WHERE table_user_settings.password = ? ")) 
    { 
     $stmt->bind_param("ss",$username, $password); 
     $stmt->bind_result($id, $email, $GUID, $slug, $id_roles, $address, $city, $state, $zip_code, $notes); 
     $result = $stmt->execute(); 
     $stmt->fetch(); 
    } 

    var_dump($this->db->error); 

    $stmt->close(); 
    return $result; 

現在從查詢返回的錯誤是這樣的:

string(226)「您的SQL語法有錯誤;請查看與您的MySQL服務器版本相對應的手冊,以便在'INNER JOIN table_roles ON table_roles.id = table_users.id_roles INNER JOIN table'附近使用正確的語法1「

查詢有什麼問題?

回答

0

。在你的查詢語法錯誤: WHERE table_users.data = 0這應該跟從JOIN

if($stmt = $this->db->prepare("SELECT table_users.id AS user_id, table_users.email AS user_email, table_users.GUID as user_guid, " 
     . "table_roles.slug AS role_slug, table_user_settings.username, table_users.id_roles, " 
     . "table_users.first_name, table_users.last_name, table_users.mobile_number, table_users.phone_number, " 
     . "table_users.address, table_users.city, table_users.state, table_users.zip_code, table_users.notes " 
     . "FROM table_users " 
     . "INNER JOIN table_roles ON table_roles.id = table_users.id_roles " 
     . "INNER JOIN table_user_settings ON table_user_settings.GUID = table_user.GUID " 
     . "WHERE table_users.data = 0 AND " 
     . "WHERE table_user_settings.username = ? AND " 
     . "WHERE table_user_settings.password = ? ")) 
+0

現在的錯誤是附近:'「WHERE primo_user_settings.username =? WHERE primo_user_settings.password =?' – Sandokan

+1

哎呀糾正..缺少'AND' –

2

您的查詢,3項WHERE條款時,只有1個是有效的,它應該後FROMINNER JOIN條款去。 WHERE子句中的所有條件應與AND子句分開(在此查詢中)。

if($stmt = $this->db->prepare("SELECT table_users.id AS user_id, table_users.email AS user_email, table_users.GUID as user_guid, " 
    . "table_roles.slug AS role_slug, table_user_settings.username, table_users.id_roles, " 
    . "table_users.first_name, table_users.last_name, table_users.mobile_number, table_users.phone_number, " 
    . "table_users.address, table_users.city, table_users.state, table_users.zip_code, table_users.notes " 
    . "FROM table_users " 
    . "INNER JOIN table_roles ON table_roles.id = table_users.id_roles " 
    . "INNER JOIN table_user_settings ON table_user_settings.GUID = table_user.GUID " 
    . "WHERE table_users.data = 0 AND " 
    . "table_user_settings.username = ? AND " 
    . "table_user_settings.password = ? ")) 

你可能想看看在MySQL文檔的有效的SQL語法:http://dev.mysql.com/doc/refman/5.7/en/select.html

+0

好吧,所以我不能在加入之前放一個地方? – Sandokan

+0

不,首先選擇,然後是FROM和JOINs,然後在那裏 – tdragon

+0

我在MySql中爲SQL查詢添加了MySql文檔的鏈接 – tdragon