2012-04-21 116 views
1

我最近被要求從我的數據庫輸入更多信息,而我剛剛加入LEFT JOIN來幫助我,它幾乎完美地工作(它確實從另一個表中獲得正確的字段),但我的WHERE子句是無效的,使用戶無需限制我的where子句即可訪問這兩個表。LEFT JOIN break WHERE子句

MySQL並沒有收集任何錯誤,所以我假設這是與我的where子句或連接中發生的事情有關。

SELECT * FROM students 
LEFT JOIN courses ON students.appliedforCourse = courses.idNumber 
WHERE 
    students.telephone LIKE '%$var' 
    OR students.email LIKE '%$var' 
    OR students.address like'%$var%' 
    OR (CONCAT(students.firstName,' ',students.lastName) LIKE '%$var%') 
    AND addedBy ='$userid' 
LIMIT $s,limit 
+0

請詳細解釋您的要求,因爲我不明白你到底想要什麼。查詢看起來不錯,但解釋你想要得到的結果更重要(包括被查詢的表的定義)。 – LightBulb 2012-04-21 12:25:05

+0

查詢返回的行沒有WHERE子句的影響,$ vars也被正確填寫。 – PwnageAtPwn 2012-04-21 12:30:14

+0

簡單的問題:你知道'LEFT JOIN'和'INNER JOIN'之間的區別嗎? – LightBulb 2012-04-21 12:34:24

回答

5

查詢本身是正確的(雖然由於OR和%%[索引將不會被使用]而真的效率低下)。
我會建議迴應查詢,你確定$ var被正確評估?嘗試直接在mysql中運行查詢(例如通過phpmyadmin或使用控制檯)。

+0

$ vars被正確插入(我檢查了查詢),但行輸出保持不受影響,另一個打擊我的是,addedBy被填充,並根據我的表格,它不應該返回任何行,因爲它沒有得到正確的字符串。 – PwnageAtPwn 2012-04-21 12:29:03

+0

你可以用echo的結果更新問題嗎? – mkk 2012-04-21 12:39:05

+0

我可以看到你已經接受了我的答案,我只是好奇到底什麼是錯的? – mkk 2012-04-21 12:48:36

0

我懷疑你只是沒有設置$ var值。然後調節例如students.telephone LIKE'%$ var'將變成students.telephone LIKE'%'(對於非空地址總是爲true),它將匹配連接的每條記錄,正是你所得到的。