2011-03-01 68 views
2

进入一个MYSQL查询,我试图插入一个WHERE子句(出现在下面的PHP注释中)。每当我把这个子句放在MYSQL查询语句中时,它总是失败(我已经在LEFT JOIN之前和ORDER BY子句之前尝试过了)。MySQL - WHERE子句加上LEFT JOIN?

关于如何让我的声明起作用的任何想法?

<?php 
$result = mysql_query("SELECT * 
         FROM Items 
        LEFT JOIN Topics on Topics.TopicID = Items.FK_TopicID 
        ORDER BY TopicSort, TopicName ASC, ItemSort, ItemTitle"); 
/* WHERE FK_UserID=$_SESSION[user_id] */ 
$topicname = false; 

while($row = mysql_fetch_array($result)) { 
    if (!$row['TopicID']) { 
      $row['TopicName'] = 'Sort Me'; 
    } 
if ($topicname != $row['TopicName']) { 
    echo '<ul><li>' . $row['TopicName'] . '</li><ul>'; 
    $topicname = $row['TopicName']; 
} 
echo ''; 
echo '<li>' . $row['ItemTitle'] . '</li>'; 
echo ''; 
} 
    if ($topicname != $row['TopicName']) { 
    echo '</ul>'; 
    $topicname = $row['TopicName']; 
} 

?> 
+1

什么是 “失败” 是什么意思?您收到错误讯息?你得到的数据,但不是你想要的数据? –

回答

6

SQL表示结构查询语言 - 你不能把你的地方在查询想要一个WHERE子句。 WHERE子句必须位于FROM/JOIN子句之后,并且位于GROUP BY,HAVING和ORDER BY子句之前。 IE:

SELECT * 
    FROM ITEMS i 
LEFT JOIN TOPICS t ON t.TopicID = i.FK_TopicID 
    WHERE FK_UserID = $_SESSION[user_id] 
ORDER BY TopicSort, TopicName ASC, ItemSort, ItemTitle 

一个更好的选择,从SQL注入攻击自己隔绝,是使用sprintf

$sql = sprintf("SELECT * 
        FROM ITEMS i 
      LEFT JOIN TOPICS t ON t.TopicID = i.FK_TopicID 
       WHERE FK_UserID = %u 
       ORDER BY TopicSort, TopicName ASC, ItemSort, ItemTitle", 
       mysql_real_escape_string($_SESSION[user_id])); 

$result = mysql_query($sql); 
+0

感谢您的协助。我按照所列的顺序放置它,但我仍然收到以下错误。我想sprintf来保护自己免受注入攻击,但我想我会让原作首先工作。 mysql_fetch_array在没有WHERE子句的情况下工作正常,但我需要将其限制为只有一个user_id。 '警告:mysql_fetch_array():提供的参数不是有效的MySQL结果资源' – webdude77

1

将WHERE子句放在ORDER BY子句之前。 http://dev.mysql.com/doc/refman/5.0/en/join.html

"SELECT * FROM Items LEFT JOIN Topics on Topics.TopicID = Items.FK_TopicID WHERE whateverTableTheFK_UserIDColumnIs.FK_UserID='".$_SESSION['user_id']."' ORDER BY TopicSort, TopicName ASC, ItemSort, ItemTitle" 
+0

谢谢大家。我也想念whateverTableTheFK_UserIDColumnIs.FK_UserID。很有帮助!我将更多地了解结构化查询语言! :) – webdude77