编写这两个SQL查询的更好方法是什么?

时间:2011-11-17 15:41:27

标签: php mysql sql

它获取网址的名称,找到ID并使用它来查找与此ID相关联的产品。

有没有更好的方法来写这个?说得更好我的意思是表现。我不知道是否可以合并这两个查询以获得更好的性能。

$cname = mysql_real_escape_string($_GET["c"]);

$row = mysql_fetch_assoc(mysql_query("SELECT id FROM companies WHERE name = '$cname' LIMIT 1"));
$cID = $row['id'];

$products = mysql_query("SELECT name FROM products WHERE company_id = '$cID' " );
while($product = mysql_fetch_assoc($products)) {
                echo $product['name'].'<br>';
            }

5 个答案:

答案 0 :(得分:4)

SELECT c.id, p.name
FROM companies c
INNER JOIN products p ON p.company_id = c.id
WHERE c.name = '$cname'

答案 1 :(得分:1)

只需使用简单的连接:

SELECT p.name FROM products p, companies c
WHERE c.id = p.company_id
AND c.name = '<COMPANY NAME>';

只要公司名称是唯一的,那么您就不会遇到任何问题。

答案 2 :(得分:1)

为了安全起见,您可以(应该)考虑参数化查询。见these results

答案 3 :(得分:0)

当然,您可以将它们合并为一个:

SELECT products.name
  FROM products
  JOIN companies
    ON products.company_id = companies.id
  WHERE companies.name = '$cname'

然而,这在第一个查询中丢失了LIMIT - 你会期望达到这个吗?

答案 4 :(得分:0)

你可以这样做:

SELECT p.name
  FROM products p
  JOIN companies c
    ON (p.company_id = c.id)
  WHERE c.name = '$cname'