Mysql选择项目列表(重复到一定数量)

时间:2010-10-08 00:49:50

标签: php mysql

我有以下结构:

Table: products

id, name, sort_order

假设我只有5种产品,但我想要20种产品。

我如何循环获得20个结果?

此外,我需要从特定的sort_order开始。所以我要说我有

1,2,3,4,5

我希望得到20个结果并从3开始。它最终应该是:

3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,etc.

有什么想法吗?我完全迷路了......谢谢!

3 个答案:

答案 0 :(得分:0)

$how_many = 20;
$counter = 0;
$rows = array();

$result = mysql_query("Your query");
while($row == mysql_fetch_row($result)) {
  $rows[] = $row;
}

$expanded = array();
for($i = 0; $counter < $how_many; $counter++) {
  $expanded[] = $rows[$i];
  $i++;
  if($i == count($rows)) {
    $i = 0;
  }
}

现在$expanded充满了这5行4次。

编辑:不要忘记将$i调整为您的开始元素。对于你的例子,这意味着$i = 2(第三个元素)。

答案 1 :(得分:0)

创建一个名为abc的表,并使用此过程填充表

CREATE PROCEDURE `populator`(i INT)
BEGIN
   DECLARE existing int;
   DECLARE counting int;
   DECLARE limitation int default i;
   SELECT COUNT(*) INTO existing FROM asd;
   theLoop: LOOP
     SELECT COUNT(*) INTO counting FROM abc;
     IF (existing + counting) >  i
       THEN SET limitation = i - counting;
     END IF;
     IF counting >= i
       THEN LEAVE theLoop;
       ELSE
         SET @sql = CONCAT("INSERT INTO abc SELECT id from asd LIMIT ", limitation);
         PREPARE s1 FROM @sql;
         EXECUTE s1;
         DEALLOCATE PREPARE s1;
     END IF;
   END LOOP theLoop;
END

记得重命名表格。我使用asd作为源表,使用abc作为目标表。如果你正确地进行连接,你甚至可以编写一个与临时表一起使用的过程。

答案 2 :(得分:0)

您可以通过作弊在MySQL中执行此操作:

SELECT
   t1.id
FROM
   products t1
   CROSS JOIN products t2
LIMIT
   2, 20

和其他人一样,我不是百分百肯定你想要的。你想再次展示相同的产品,直到20次?