我有以下结构:
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.
有什么想法吗?我完全迷路了......谢谢!
答案 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次?