鍍金池/ 問答/PHP  數(shù)據(jù)庫  網(wǎng)絡(luò)安全/ while 的困擾,如何改善成只要一個查詢?

while 的困擾,如何改善成只要一個查詢?

$product_data = $mysqli->query(
        "SELECT
          p.url as url,
          p.description as description,
          p.info as info,
          p.note as note,
          p.content as content,
          p.name as pname,
          p.icon as icon,
          p.price as price,
          p.original_price as original_price,
          p.prod_id as prod_id,
          p.stock as stock,
          p.views as views,
          s.name as sname,
          c.name as cname,
          p.add_time as add_time
        FROM `product` as p
        JOIN
          `store` as s ON p.store_id = s.store_id
        JOIN
          `category` as c ON c.category_id = p.category_id
        WHERE
          p.active = 1
        ORDER BY `prod_id` DESC
while($row = mysqli_fetch_array($product_data)){
$theme = $mysqli->query(
        "SELECT
        t.name as tname
        FROM `product` as p
        JOIN
          `product_theme` as pt ON p.prod_id = pt.prod_id
        JOIN
          `theme` as t ON t.theme_id = pt.theme_id
        WHERE
          p.prod_id = '{$row['prod_id']}' "
      );

      $buyTotal = mysqli_fetch_array($mysqli->query(
        "SELECT sum(quan) as quan FROM `stock`
        WHERE
          `prod_id` = '{$row['prod_id']}' "
      ));

      $viewsIp = mysqli_num_rows($mysqli->query(
        "SELECT * FROM `product_view`
        WHERE
          `prod_id` = '{$row['prod_id']}' "
      ));

      $pre = mysqli_num_rows($mysqli->query(
        "SELECT sum(quan) as quan FROM `user_pre`
        WHERE
          `prod_id` = '{$row['prod_id']}' "
      ));
}

直接不刪減,給大神們看看我的困擾
while 裡面的四個查詢都需要 $product_data$row['prod_id']
然後這這四個查詢都會有其他不同的作用
例如顯示符合條件的有幾筆、印出某個欄位的加總

<?=$pre;?>
<?=$buyTotal['quan'];?>

都是透過這樣的方式。
當(dāng)然希望大神可以教教我,幫我簡化簡化,感激不盡。

回答
編輯回答
巷尾

不要在循環(huán)里面放Sql語句,可以把$row['prod_id']單獨拿出來,sql語句可以寫成wherein

2017年12月22日 16:28
編輯回答
還吻

你的查詢可以放到下面這一個SQL語句中完成

SELECT
  p.url                           AS url,
  p.description                   AS description,
  p.info                          AS info,
  p.note                          AS note,
  p.content                       AS content,
  p.name                          AS pname,
  p.icon                          AS icon,
  p.price                         AS price,
  p.original_price                AS original_price,
  p.prod_id                       AS prod_id,
  p.stock                         AS stock,
  p.views                         AS views,
  s.name                          AS sname,
  c.name                          AS cname,
  p.add_time                      AS add_time,
  t.name                          AS tname, --theme name
  (SELECT sum(quan)
   FROM `stock` AS sto
   WHERE sto.prod_id = p.prod_id) AS stock_quan, --Stock對應(yīng)的quan匯總
  pv.*, --productView的所有字段
  (SELECT sum(quan)
   FROM `user_pre` AS up
   WHERE up.prod_id = p.prod_id)  AS user_pre_quan --UserPre對應(yīng)的quan匯總
FROM `product` AS p
  JOIN
  `store` AS s ON p.store_id = s.store_id
  JOIN
  `category` AS c ON c.category_id = p.category_id
  JOIN
  `product_theme` AS pt ON p.prod_id = pt.prod_id
  JOIN
  `theme` AS t ON t.theme_id = pt.theme_id
  JOIN `product_view` AS pv
    ON pv.prod_id = p.prod_id
WHERE
  p.active = 1
ORDER BY `prod_id` DESC
2017年5月5日 01:53