2012-11-20 132 views
2

我已經從下述條件檢索數據時的問題:問題PHP和MySQL

USERS(ID,用戶名,名字,姓氏,USER_TYPE,狀態);

---------------------------------- 
|1 | bsmith | Bob | Smith | 1 | 1| 
---------------------------------- 

USER_TYPE(代碼,描述)

----------- 
|1 | admin| 
|2 | guest| 
----------- 

STATUS_TYPE(ID,說明)

------------- 
|1 | active | 
|2 | suspend| 
------------- 

然後,我使用以下SQL查詢:

$sql = "SELECT u.id uid, username, last_name, first_name, 
     status, t.description status_desc, user_type, w.description type_desc 
     FROM users u 
     LEFT JOIN status_type t ON u.status = t.id 
     LEFT JOIN user_type w ON u.user_type = w.code 
     "; 

當我執行上面的sql語句時,它不通過PHP返回任何數據。 但它與mySQL命令行客戶端正常工作。

此外,如果我只是做一個左加入PHP,它工作正常。

+0

你能告訴你在哪裏執行SQL的實際代碼聲明和檢索數據? –

+0

請包括您的PHP代碼。如果它在控制檯上工作,問題不在於查詢,它在php –

+0

可能沒有在php – Drew

回答

0

您是丟失一個逗號後的 「u.id」 或者你缺少一個AS u.id後:

SELECT u.id, uid, ... 

或(更可能):

SELECT u.id AS uid, ... 
+0

'as'不需要別名。總是包含它,所以它很明顯,但沒有必要 –

+0

賀 - 謝謝Marc!我沒有意識到這一點,據我瞭解,SQL-92標準指定使用「AS」 - 你知道我是否在我的錯誤理解?還是MySQL只是對語言進行了擴展,並允許空格? –

+0

這是可選的,據我在實際規範中可以看到的,postgres需要它 –

0

什麼如果你把這個在您選擇PHP文件,並把這裏的輸出:

$sql = ''; //USE THE STRING IN YOU'RE POST ABOVE 
$query = mysql_query($sql); 
$result = mysql_fetch_object($query); 

echo '----' . "<br/>"; 
echo 'the result:' . "<br/>"; 
print_r($result, true) . "<br/>"; 
echo '----' . "<br/>"; 
echo 'the error' . "<br/>"; 
echo mysql_error() . "<br/>"; 
echo '-----' . "<br/>"; 

可以取代你自己的查詢(不要忘了剛剛走出評述吧)這一個:

SELECT 
    `user`.`id` AS 'uid', 
    `user`.`username`, 
    `user`.`last_name`, 
    `user`.`first_name`, 
    `user`.`status`, 
    `user`.`user_type` AS 'type', 
    `status_type`.`desciption` AS 'type_desc', 
    `user_type`.`description` AS 'status_desc' 
FROM `users` 
LEFT JOIN `status_type` ON `status_type`.`id` = `user`.`status` 
LEFT JOIN `user_type` ON `user_type`.`code` = `user`.`user_type` 
+0

--- - 結果:----錯誤----- –

+3

如果你把這個放在你的php文件中: error_reporting(E_ALL) ; ini_set('display_errors',1); – Benz

+0

它給了我一個空白頁面。 –

1

好了,它看起來像你糾正status_type/user_status問題。還有這些

而且在您的查詢您有:

FROM users u 

再次在原來的說明你說的表名是用戶而不是用戶。

而更多的錯別字:

LEFT JOIN status_type t ON u.status = t.code 
LEFT JOIN user_type w ON u.user_type = w.id 

USER_TYPE有代碼沒有id和status_type具有ID不代碼,應該是:

LEFT JOIN status_type t ON u.status = t.id 
LEFT JOIN user_type w ON u.user_type = w.code 
+0

感謝您指出我有這麼多的錯別字。但是user_type&status_type都是表格。 –

+0

是的,我明白,確定您加入表格的方式是否可以解決問題,或者只是在輸入信息時出現錯別字? – Pitchinnate

+0

也是表名「用戶」或「用戶」? – Pitchinnate