2013-04-17 52 views
2

我有兩個表選擇指揮加入發行

1: USERS

user_id | user_state | user_email

2: CONTACTS

contact_id | contact_name | contact_state | contact_email | contact_info

我想要做的就是選擇呼應所有「聯繫「其中」user_state「(它是登錄用戶狀態)的數據等於contact_stat即

"SELECT * FROM contacts 
INNER JOIN users 
ON contact_state = ".$row_userinfo['user_state']." 
WHERE contact_state = ".$row_userinfo["user_state"]." 
ORDER BY contact_name $limit"); 
?> 

什麼我有麻煩是它不僅顯示出相匹配的登錄的用戶狀態(USER_STATE)

,並與上面的代碼(這我不知道,如果它的數據按照我想要的方式工作是正確的)在'where clause'中提出「Unknown column'...'」

希望有人能幫助我。

+0

檢查'ON'子句,你必須從數據庫表 –

+1

指定'字段名稱'不要直接傳遞參數給查詢,這使得它很容易被sql注入。閱讀手冊[這裏](http://php.net/manual/en/security.database.sql-injection.php).. – saveATcode

+0

使用mysqli或PDO .. –

回答

0

支票JOIN條款的條件

("SELECT * FROM contacts 
INNER JOIN users ON contact_state = user_state 
WHERE contact_state = ".$row_userinfo["user_state"]." 
ORDER BY contact_name $limit"); 
0

只是改變你的條款來

SELECT * FROM `users` a 
JOIN `contacts` b 
ON a.`user_state` = b.`contact_state` 
WHERE a.`user_state` = '".$row_userinfo["user_state"]."' 
ORDER BY b.`contact_name` $limit" 

,這是因爲你在比較兩個表,並需要聲明兩個表的字段選擇什麼比較

注意你沒有指示你想要訂購的任何東西ASCDESC,所以我假定你已經存儲在這個變量$limit

+0

這個答案是類似於我想出來的但與我的一樣,它不斷地迴應結果兩次。我做了一些測試,發現如果我改變了其他用戶的狀態,結果的響應時間也是相同的,並且有很多用戶。 IE:一個用戶有一個狀態,一次回聲結果,三個用戶有相同的狀態迴響結果三次。 – Rocsha

+0

這是因爲你需要以相反的方式做,讓我來修復它 – Fabio

+0

完成,請現在檢查 – Fabio

0

試試這個

"SELECT c.* FROM contacts c 
JOIN users u 
ON c.contact_state = u.user_state 
WHERE c.contact_state = ".$row_userinfo["user_state"]." 
ORDER BY c.contact_name $limit" 
1

嘗試此查詢..

("SELECT contacts.* 
FROM users, contacts 
WHERE users.user_state = contacts.contact_state AND user_id = '".$_SESSION['id']."'"); 

這裏$_SESSION['id']是您當前用戶的登錄ID。

+0

這一個我認爲是最好的選擇,但它不會帶來任何結果。不知道爲什麼。只要查看我的會話價值並檢查是否有遺漏。 – Rocsha

+0

@Rocsha是的,你需要檢查會話ID,然後傳遞給查詢 –

+0

你是什麼意思「傳遞給查詢」? – Rocsha