2010-12-22 84 views
2

这里我用PHP做了两个查询。有更简单的东西吗?一个查询而不是两个?一个查询而不是两个?

$id = mysql_real_escape_string($_GET["id"]); 
$result = mysql_query("SELECT * FROM questionstable WHERE id=$id"); 
$row = mysql_fetch_assoc($result); 
$category = $row['category']; 
$main = mysql_query("SELECT name FROM categorytable WHERE id=$category"); 

回答

6
SELECT  questionstable.*, categorytable.name 
FROM   questionstable 
    INNER JOIN categorytable 
    ON   categorytable.id = questionstable.category 
WHERE  questionstable.id=$id 

顺便说一句,假设你questionstable.id是数字,你可以使用$id = (int)$_GET["id"]和节省一些写作。 (这也可能是一个更安全的赌注只是因为它逃过并不意味着它是完全安全 - 尤其是当它不是引号内[给你的选择很多关于SQL注入] ;-))

+0

它应该是WHERE questionstable.id = $ id。 – ilhan 2010-12-23 00:00:03

+0

@ihan:你说的没错。我的道歉,修好了。 – 2010-12-23 00:01:39

1
$id = mysql_real_escape_string($_GET["id"]); 
$main = mysql_query("SELECT c.name FROM categorytable c inner join questionstable q on c.category = q.category WHERE q.id = $id"); 
1

不要使用内部联接使用LEFT JOIN代替,它不会返回任何结果,如果没有找到该类别

SELECT questionstable.*, categorytable.name 
FROM  questionstable 
LEFT JOIN categorytable 
ON   categorytable.id = questionstable.category 
WHERE  id=$id 
2

请尝试:

SELECT name 
FROM categorytable 
WHERE id = (
       SELECT category 
       FROM questionstable 
       WHERE id = $id 
      )