2012-04-21 115 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),它将匹配连接的每条记录,正是你所得到的。