2011-06-07 132 views
0

我可以以某种方式只使用1 sql查询呢?我该如何改进此代码?

showthread.php

// Get Topic subject etc 
$threadID = isset($_GET['threadID']) ? intval($_GET['threadID']) : 0; 
$result = mysql_query("SELECT * FROM topics WHERE id = $threadID"); 

// Fetch rows 
$row = mysql_fetch_assoc($result); 
$subject = htmlspecialchars($row['subject']); 

echo '<h2>'.$subject.'</h2>'; 


// Get posts that belong to this topic! 
$posts = mysql_query("SELECT * FROM posts INNER JOIN users ON users.id = posts.user_id WHERE posts.topic_id = $threadID"); 

// posts..... 
while ($post = mysql_fetch_assoc($posts)) { 
    echo '<br>'.$post['message'].''; 
} 
+0

你为什么要这么做? – jisaacstone 2011-06-07 01:55:36

+1

这可能更适合http://codereview.stackexchange.com。 – 2011-06-07 01:55:52

+0

如果你在这里没有得到很好的回应,你应该尝试在[codereview.stackexchange.com](http://codereview.stackexchange.com/) – 2011-06-07 01:56:22

回答

2

从我的理解,你应该能够让你从这样的事情需要的所有信息? (加上或减去任何缺少的列)

SELECT topics.subject, posts.message 
FROM posts 
INNER JOIN users ON users.id = posts.user_id 
INNER JOIN topics ON topics.id = posts.topic_id 
WHERE posts.topic_id = $threadID 
+0

+1指定你想要的列而不是“select *”是个好主意。 – 2011-06-07 02:00:53

1

使用的mysqli
使用real_escape_string
使用准备好的语句或PDO

+0

在这种情况下,real_escape_string实际上并不会非常有益 - 他首先将数字转换为数字。 – cwallenpoole 2011-06-07 02:05:40

+0

@cwallenpoole,在这种情况下的确如此。但这些仍然是如何改进代码的好建议。 +1 – 2011-06-07 02:09:42