我想从表中选择最近的12行,但随后打乱顺序。
所以我不能使用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
,它们之间的关系是正确的,我猜我错了。
关于如何解决这个问题,有什么建议吗?也许我的方法一点都不好。
谨致问候,Alexander
您可以将它们全部放在PHP中的一个数组中,然后用shuffle()
随机化该数组的顺序,或者使查询选择最近的12个子查询,然后用外部查询随机化结果。只需先用$items[] = $row;
存储项目,然后用shuffle($items)
存储项目;并对其进行迭代。您不会在$key
中获得$photo_id
,但它仍将在$item['photo_id']
中
PHP的shuffle()
函数从数组中删除任何现有键:
注意:此函数为数组中的元素分配新的键。它将删除可能已分配的任何现有关键帧,而不仅仅是重新排序关键帧。
此函数最好用于数字索引数组。一种快速的方法是编写自己的shuffle函数,该函数适用于关联数组。我在之前的Stack Overflow帖子中发现了这个:
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;
}
原始链接:
PHP随机乱序数组维护键=>值
您可以使用子查询:
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'];
}