2013-10-25 123 views
-1

我想從我的數據庫location中獲取我的位置citycountry數據。加入兩張表以獲取數據

這是我的代碼:

$data = mysql_fetch_array(mysql_query(" 
SELECT 
u.`prename`, 
u.`surname`, 
DATE_FORMAT(u.`birthday`, '%d. %M') AS bday, 
l.`city`, 
l.`country` 

FROM 
`users` AS u 
LEFT JOIN `users_location` AS ul ON ul.`uid` = u.`id` 
LEFT JOIN `locations` AS l ON l.`id` = ul.`location_id` 

WHERE u.`id`='".(int) ($_GET['id'])."'")); 

users_location指定哪些用戶具有location_id

users_location結構:iduidlocation_id

locationscitycountry名稱。

但是使用我的查詢citycountry是空的。我猜是因爲我的加入聲明?

+0

該聲明對我來說是正確的。 – Lorenz

+0

問題是什麼?是的,這就是「左連接」,但是你有問題嗎? –

+0

請在使用前清理GET變量:/ – demonking

回答

2

我從來沒有使用「LEFT JOIN table爲T

簡單。 「LEFT JOIN table T」,像這樣;

SELECT 
    u.`prename`, u.`surname`, DATE_FORMAT(u.`birthday`, '%d. %M') AS bday, 
    l.`city`, l.`country` 
FROM `users` u 
LEFT JOIN `users_location` ul ON ul.`uid` = u.`id` 
LEFT JOIN `locations` l ON l.`id` = ul.`location_id` 
WHERE u.`id` = {$id}; 

編輯: 並請考慮檢查數據,而不只是在做什麼你做了

某事的效果。

$id = (array_key_exists('id', $_GET) && is_string($_GET['id']) && ctype_digit($_GET['id'])) 
    ? $_GET['id'] : FALSE : 
if ($id) 
{ 
    SELECT 
     u.`prename`, u.`surname`, DATE_FORMAT(u.`birthday`, '%d. %M') AS bday, 
     l.`city`, l.`country` 
    FROM `users` u 
    LEFT JOIN `users_location` ul ON ul.`uid` = u.`id` 
    LEFT JOIN `locations` l ON l.`id` = ul.`location_id` 
    WHERE u.`id` = {$id}; 
} 
else 
{ 
    echo 'No valid ID was provided.'; 
}