在第一个表上使用WHERE子句进行左外连接


LEFT OUTER JOIN with a WHERE clause on the first table

我想从一个表中SELECT a一些行,但这些行必须满足column = value这样的条件。下面是我的SELECT声明:

$query = "SELECT t1.title, t1.introtext, t2.jr_street, t2.jr_city, 
    t2.jr_state, t2.jr_postalcode, t2.jr_country, t3.created, t3.name, 
    t3.title, t3.comments, t4.ave 
FROM $table1 t1
    LEFT OUTER JOIN $table2 t2 ON t1.id = t2.contentid
    LEFT OUTER JOIN $table3 t3 ON t1.id = t3.pid
    LEFT OUTER JOIN $table4 t4 ON t1.id = t4.reviewid
";

我尝试在FROM语句后添加WHERE子句,但我得到SQL语法错误。

看来我得猜你的问题了。下次你应该给我们完整的例子和准确的误差。你试过这样的东西吗?

$value = (int) $_POST['value'];
$query = "SELECT t1.title, t1.introtext, t2.jr_street, t2.jr_city, t2.jr_state,
t2.jr_postalcode, t2.jr_country, t3.created, t3.name, t3.title, 
t3.comments, t4.ave FROM $table1 t1
LEFT OUTER JOIN $table2 t2 ON t1.id = t2.contentid
LEFT OUTER JOIN $table3 t3 ON t1.id = t3.pid
LEFT OUTER JOIN $table4 t4 ON t1.id = t4.reviewid
WHERE t2.column = ".$value."
AND t1.catid=8";

我只是猜你想从表2中选择;)您必须填写正确的表格和列。此外,我把类别选择放在where子句中,因为我认为这使它更容易读。

请绝对确保所有变量,如$value(和表)保存在查询中使用,例如,$value是一个整数,表在你的代码中显式设置,而不是用户输入。你可以在这里阅读更多关于sql - injection的信息:

  • http://de.wikipedia.org/wiki/SQL-Injection
  • 如何在PHP中防止SQL注入?为什么我不应该't在PHP中使用mysql_*函数?