Php while循环中的SQL查询

Php while循环中的SQL查询,php,mysql,sql,Php,Mysql,Sql,我在while循环中有一系列mysql查询。。就这样 $sql = mysql_query("SELECT productid FROM cart WHERE userid='$userid'") while($row = mysql_fetch_assoc($sql)){ $pid = $row['product_id']; //Second one $sql2 = mysql_query("SELECT barcode,quantity FROM products WHER

我在while循环中有一系列mysql查询。。就这样

 $sql =  mysql_query("SELECT productid FROM cart WHERE userid='$userid'")
 while($row = mysql_fetch_assoc($sql)){
 $pid = $row['product_id'];

 //Second one

 $sql2 =  mysql_query("SELECT barcode,quantity FROM products WHERE id='$pid'")`
 while($row2 = mysql_fetch_assoc($sql2)){
 $quantity = $row2['quantity'];
 $barcode = $row2['barcode'];

 //Third one

 $sql3 = mysql_query("SELECT name,price FROM inventory WHERE product_barcode=$barcode");
 while($row3 = mysql_fetch_assoc($sql3)){
 $name = $row3['name'];
 $price = $row3['price'];

 echo $name.'<BR />'.$price.'<BR />.$quantity';

   }
 }
}
$sql=mysql\u查询(“从购物车中选择productid,其中userid='$userid'))
while($row=mysql\u fetch\u assoc($sql)){
$pid=$row['product_id'];
//第二个
$sql2=mysql_查询(“选择条形码,从id为“$pid”的产品中选择数量”)`
而($row2=mysql\u fetch\u assoc($sql2)){
$quantity=$row2['quantity'];
$barcode=$row2['barcode'];
//第三个
$sql3=mysql_查询(“从库存中选择名称、价格,其中产品_条码=$barcode”);
while($row3=mysql\u fetch\u assoc($sql3)){
$name=$row3['name'];
$price=$row3['price'];
回显$name.“
”。$price.“
.$quantity”; } } }

您可以看到这些查询相互依赖,因此使用while循环来获得所有可能的结果。但我不认为这种查询方式是一种好的做法。这需要很多时间,是吗?我不知道。。任何人都可以编辑并向我展示一种更好的查询和输出这些类似查询的方法。谢谢

您可以使用单个查询并将表连接在一起:

SELECT
  inventory.name,
  inventory.price,
  products.quantity
FROM
  cart
INNER JOIN
  products ON cart.product_id = products.id
INNER JOIN
  inventory ON products.barcode = inventory.product_barcode
WHERE
  cart.userid = 1
它还值得研究扩展和使用

试试看
{
$mysqli=newmysqli('hostname','username','password','database');
如果($mysqli->connect\u error)
{
抛出新异常($mysqli->connect\u error);
}
如果(!$stmt=$mysqli->准备(“
挑选
inventory.name,
存货价格,
产品数量
从…起
运货马车
内连接
购物车上的产品.product\u id=产品.id
内连接
产品上的库存。条形码=库存。产品\条形码
哪里
cart.userid=?
"))
{
抛出新异常($mysqli->error);
}
if(!$stmt->bind_参数('i',$userid))
{
抛出新异常($stmt->error);
}
如果(!$stmt->execute())
{
抛出新异常($stmt->error);
}
if(!$stmt->bind_result($name、$price、$quantity))
{
抛出新异常($stmt->error);
}
而($result=$stmt->fetch())
{
回显$name.
。$price.
。$quantity; } if(FALSE==$result) { 抛出新异常($stmt->error); } } 捕获(例外$e) { echo$e->getMessage(); }
您可以使用单个查询并将表连接在一起:

SELECT
  inventory.name,
  inventory.price,
  products.quantity
FROM
  cart
INNER JOIN
  products ON cart.product_id = products.id
INNER JOIN
  inventory ON products.barcode = inventory.product_barcode
WHERE
  cart.userid = 1
它还值得研究扩展和使用

试试看
{
$mysqli=newmysqli('hostname','username','password','database');
如果($mysqli->connect\u error)
{
抛出新异常($mysqli->connect\u error);
}
如果(!$stmt=$mysqli->准备(“
挑选
inventory.name,
存货价格,
产品数量
从…起
运货马车
内连接
购物车上的产品.product\u id=产品.id
内连接
产品上的库存。条形码=库存。产品\条形码
哪里
cart.userid=?
"))
{
抛出新异常($mysqli->error);
}
if(!$stmt->bind_参数('i',$userid))
{
抛出新异常($stmt->error);
}
如果(!$stmt->execute())
{
抛出新异常($stmt->error);
}
if(!$stmt->bind_result($name、$price、$quantity))
{
抛出新异常($stmt->error);
}
而($result=$stmt->fetch())
{
回显$name.
。$price.
。$quantity; } if(FALSE==$result) { 抛出新异常($stmt->error); } } 捕获(例外$e) { echo$e->getMessage(); }
当数据库表之间存在关系时,可以使用表联接将多个查询有效地压缩为一个查询。表连接和关系是相当大的主题,所以我不会深入讨论

以您的前两个问题为例:

$sql =  mysql_query("SELECT productid FROM cart WHERE userid='$userid'")
$sql2 = mysql_query("SELECT barcode,quantity FROM products WHERE id='$pid'")`
这里两个表之间的关系是,
cart
表包含每个用户的产品ID(
productid
)列表。
products
表包含一个产品列表(
id
),每个产品都有一个产品id

由此,您可以说一个产品可能属于多个购物车行。这称为一对多关系

要说“给我这个用户购物车中的产品数量”,可以用以下SQL查询表示:

SELECT 
    p.quantity 
FROM 
    products AS p
RIGHT JOIN 
    cart AS c
ON p.id = c.productid
WHERE c.userid = '$userid'
@MichaelRushton已经给了你一个非常好的、可行的答案,但是你应该更多地研究连接的类型


它们最终将为您节省大量时间和处理能力。

当数据库表之间存在关系时,您可以使用表联接将多个查询有效地压缩为一个查询。表连接和关系是相当大的主题,所以我不会深入讨论

以您的前两个问题为例:

$sql =  mysql_query("SELECT productid FROM cart WHERE userid='$userid'")
$sql2 = mysql_query("SELECT barcode,quantity FROM products WHERE id='$pid'")`
这里两个表之间的关系是,
cart
表包含每个用户的产品ID(
productid
)列表。
products
表包含一个产品列表(
id
),每个产品都有一个产品id

由此,您可以说一个产品可能属于多个购物车行。这称为一对多关系

要说“给我这个用户购物车中的产品数量”,可以用以下SQL查询表示:

SELECT 
    p.quantity 
FROM 
    products AS p
RIGHT JOIN 
    cart AS c
ON p.id = c.productid
WHERE c.userid = '$userid'
@MichaelRushton已经给了你一个非常好的、可行的答案,但是你应该更多地研究连接的类型


它们最终将为您节省大量时间和处理能力。

您应该考虑使用JOIN s,而不是这样做

 $sql = "SELECT `c`.`productid`, `p`.`barcode`,`p`.`quantity`,
               `i`.`name`, `i`.`price` 
         FROM `cart` c
         JOIN `products` p ON `p`.`id` = `c`.`product_id`
         JOIN `inventory` i ON `i`.`product_barcode` = `p`.`barcode`
         WHERE userid='$userid'";

$result =  mysql_query($sql);
$row = mysql_fetch_assoc($result);
echo $row['name'].'<br />'.$row['price'].'<br />'.$row['quantity'];
$sql=“选择`c`.`productid`、`p`.`barcode`、`p`.`quantity`,
`i`.`name`、`i`.`price`
从'cart'c
在'p'上加入'products'p。'id`='c`.'product\u id`
在'i'上加入'inventory'i。'product\u barcode`='p`.'barcode`
其中userid='$userid';
$result=mysql\u查询($sql);
$row=mysql\u fetch\u assoc($result);
echo$row['name'].
.$row['price'..
.$row['quantity'];
我知道MichaelRushton已经准备好提供答案了,但是我已经完成了一半,当他发布他的答案时,这是使用你的代码,所以这里是anywa