如何在没有NESTED LOOP的情况下更快地完成SELECT

时间:2017-10-08 14:09:56

标签: php mysql sql loops nested

您好我正在为网上商店制作T恤网站。每个产品(来自所有1400个)都有自己的ID(idedro),但每个ID都有不同的颜色,有时一个,有时二十个。 我需要使用下面的所有颜色显示自己图片中的每个产品,但我认为循环内部的循环占用了太多的CPU时间。是否有任何方法可以使用一个循环或enter image description here使用JOIN或准备好的语句?

$querycount = mysqli_query($link,"SELECT DISTINCT (idedro) 
    FROM megadb WHERE catteniskiipotnici=1 ORDER BY idedro ASC");

  while ($rowcounts = mysqli_fetch_assoc($querycount)) {


  $result1 = mysqli_query($link,"SELECT color 
    FROM megadb WHERE idedro='$rowcounts[idedro]'");

       while ($row1=mysqli_fetch_array($result1)) { echo $row1[color]; } 
      }

1 个答案:

答案 0 :(得分:1)

这应该使用GROUP_CONCAT()

执行您想要的操作
SELECT idedro, group_concat(color)
FROM megadb 
WHERE catteniskiipotnici=1 
GROUP BY idedro
ORDER BY idedro ASC

SQL Fiddle

MySQL 5.6架构设置

CREATE TABLE megadb
    (`idedro` int, `color` varchar(5), `catteniskiipotnici` int)
;

INSERT INTO megadb
    (`idedro`, `color`, `catteniskiipotnici`)
VALUES
    (1, 'blue', 1),
    (2, 'blue', 1),
    (2, 'red', 1),
    (3, 'blue', 1),
    (3, 'red', 1),
    (3, 'white', 1),
    (4, 'blue', 0)
;

查询1

    SELECT idedro, group_concat(color)
    FROM megadb 
    WHERE catteniskiipotnici=1 
    GROUP BY idedro
    ORDER BY idedro ASC

<强> Results

| idedro | group_concat(color) |
|--------|---------------------|
|      1 |                blue |
|      2 |            blue,red |
|      3 |      blue,red,white |