【问题标题】:using array in sql query在sql查询中使用数组
【发布时间】:2009-08-18 09:14:07
【问题描述】:

我有以下内容可以抓取父类别下的所有类别:

<?php
$childrows = array();
$result2 = mysql_query("SELECT * FROM categories WHERE category_parent_id='$cid'"); while
($row = mysql_fetch_array($result2)){
$childrows [] = $row['category_id'];
print_r($childrows); }
?>

这会返回:

Array ( [0] => 47 ) Array ( [0] => 47 [1] => 48 ) Array ( [0] => 47 [1] => 48 [2] => 63 ) Array ( [0] => 47 [1] => 48 [2] => 63 [3] => 64 ) Array ( [0] => 47 [1] => 48 [2] => 63 [3] => 64 [4] => 68 ) Array ( [0] => 47 [1] => 48 [2] => 63 [3] => 64 [4] => 68 [5] => 69 ) 

我遇到的问题是下一个阶段,我需要从 products 表中计算存储在数组中的 category(category_id) 下的 products(product_id) 的数量。

一定有办法!!??

感谢收看。 B.

完整代码:

    <?php
    if ($num_rows == 0) {
$result2 = mysql_query("SELECT * FROM categories WHERE category_parent_id='$cid'");
while ($row = mysql_fetch_array($result2)){
$childrows [] = $row['category_id'];
}
$category_string = implode(",",$childrows);
$result3 = mysql_query("SELECT   category_id, COUNT(product_id) 
                        FROM     products                         
                        WHERE category_id IN ($in_string)");
$result3 = mysql_fetch_array($result3);
$result3 = $result3[1];
echo $result3;
}
else {
echo $num_rows;
}
    ?>

但这只是重复:

注意:未定义变量:in_string in on line 31(WHERE category_id IN ($in_string)");)

警告:mysql_fetch_array():提供的参数不是第 32 行上的有效 MySQL 结果资源 ($result3 = mysql_fetch_array($result3);)

【问题讨论】:

  • 你需要获取它们.... $result3 = mysql_query(...);回声 $result3;
  • 但这就是我所做的……不是吗?

标签: php sql


【解决方案1】:
$result3 = mysql_query("SELECT   category_id, COUNT(product_id) 
                        FROM     products                         
                        WHERE category_id IN ($in_string)");
$result3 = mysql_fetch_array($result3);
$result3 = $result3[1];
echo $result3;

【讨论】:

  • 不喜欢 - result3[1] --> 意外的'['
【解决方案2】:

首先,当心 SQL 注入,如果 $cid 是不受信任的输入(来自用户的输入),您至少应该使用 mysql_real_escape_string($cid)。

您的问题对我来说不是特别清楚,但您只需执行第二次查询,获取给定数组的每个类别的产品数量,您可以这样做:

/* After obtaining $childrows */
$category_string = implode(",",$childrows);
$result3 = mysql_query("SELECT COUNT(product_id) FROM products 
                        WHERE category_id IN ($category_string)");

$result3 将包含代表所有产品数量的单个数字的记录集的句柄,每个产品所在的类别计数一次,属于 $childrows 数组中的类别

【讨论】:

  • 我认为他想要所有产品,没有 group by
  • 也许......正如我所说,模棱两可的问题
  • 是 *Svetlozar 我只希望返回一个数字,总计属于特定父类别的所有子类别的产品数量......抱歉,如果我没有解释得很好!跨度>
  • 属于特定父类或数组中的所有父类?
  • 该数组包含特定父级的所有子类别,我想要该特定父级下所有子类别下的产品总数...
【解决方案3】:
SELECT COUNT(product_ID)
FROM   product
WHERE  category_id IN (HERE you implode your categories)

【讨论】:

  • 是的,一个产品可以属于几个类别,但如果说它属于 2 个类别,我希望它出现在两个类别中。
  • 那么不要使用 DISTINCT COUNT,保持原样查询
  • 不,我认为他的意思是他希望它们被计算两次,而不是出现在每个类别中。
  • 像这样:SELECT COUNT(product_ID) FROM product WHERE category_id IN (implode(",",$childrows)); ????
猜你喜欢
  • 2011-02-20
  • 1970-01-01
  • 2021-11-01
  • 2020-03-07
  • 2019-04-05
  • 2020-10-14
  • 1970-01-01
  • 1970-01-01
  • 2016-08-23
相关资源
最近更新 更多