mysql order by photo_id desc and shuffle after
我想从表格中选择最近的12行,但随后将顺序洗牌。mysql order by photo_id desc and shuffle after
所以我不能使用ORDER BY RAND(),因为这只会随机选择一些行而不是最近的12行。
我在想这样的事情,但它没有工作按计划进行:
$artig_photos = mysql_query("
SELECT photo_id, photo_name
FROM `migo_artig_photos`
WHERE (
photo_deleted=0 AND photo_type=2
)
ORDER BY photo_id DESC
LIMIT 12;
");
while ($row = mysql_fetch_array($artig_photos)) {
$artig_shuffled[$row['photo_id']] = $row['photo_name'];
}
shuffle($artig_shuffled);
后来当我这样做:
foreach ($artig_shuffled as $key => $value) {
}
我预期的关键是photo_id
和值为photo_name
与他们之间的正确关系,猜测我错了。
有关如何解决此问题的任何提示?也许我的方法不是很好。
方面的最佳, 亚历山大
你可以使用子查询:
SELECT * FROM (
SELECT `migo_artig_photos`.`photo_id`,
`migo_artig_photos`.`photo_name`
FROM `migo_artig_photos`
WHERE `migo_artig_photos`.`photo_deleted` = 0 AND
`migo_artig_photos`.`photo_type` = 2
ORDER BY photo_id DESC
LIMIT 12) `top_12_migo_artig_photos`
ORDER BY RAND();
或者,你可以这样做:
// To shuffle:
while ($row = mysql_fetch_array($artig_photos))
{
$artig_shuffled[] = $row;
}
shuffle($artig_shuffled);
// To display:
foreach ($artig_shuffled as $row)
{
echo $row['photo_id'];
echo $row['photo_name'];
}
非常感谢你!像魅力一样工作:) – Alexander 2011-06-15 02:55:48
不客气! – 2011-06-15 03:22:24
你可以把他们都在PHP中的数组,然后随机数组的顺序与shuffle()
,或作出查询,以选择最近12次的查询,然后用外部查询随机化结果。只需存储$items[] = $row;
,然后shuffle($items)
;并迭代它。你不会得到$key
的$photo_id
,但它仍将是$item['photo_id']
PHP的shuffle()
函数删除您阵列中的任何现有密钥:
注意:此函数将新键分配给数组中的元素。它将删除可能已分配的所有现有密钥,而不仅仅是重新排序密钥。
该函数最适用于数字索引数组。一个快速的方法是只编写自己的shuffle函数,用于关联数组。我发现这是在以前的堆栈溢出后:
function shuffle_assoc($list) {
if (!is_array($list)) return $list;
$keys = array_keys($list);
shuffle($keys);
$random = array();
foreach ($keys as $key) {
$random[] = $list[$key];
}
return $random;
}
链接到原:
的'shuffle'不保留数组键。 – Ryan 2011-06-15 02:25:07