首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql order by rand PHP

问Mysql order by rand PHP
EN

Stack Overflow用户
提问于 2012-08-07 06:09:41
回答 2查看 214关注 0票数 0

我正在使用

代码语言:javascript
复制
$nameimg = mysql_query("SELECT * 
                        FROM images 
                        WHERE id='".$row['imgID']."' 
                        ORDER BY RAND()    
                        LIMIT 10");

显示该用户的随机图像,但它不显示随机图像。它只是通过提交的时间显示出来。

EN

回答 2

Stack Overflow用户

发布于 2012-08-07 06:14:34

检查ID的WHERE条件通常会将结果集减少到一行,因此整个ORDER BY子句就变得无用了。

您应该考虑您的模式,并重新设计查询。

票数 0
EN

Stack Overflow用户

发布于 2012-08-07 06:21:03

您应该使用PHP来随机地对数组进行随机置乱。如果您感兴趣的字段名为url

代码语言:javascript
复制
$req = mysql_query("SELECT url FROM images WHERE user_id = '{$row['userID']}'");
$images = array();
while($image = mysql_fetch_array($req)) {
    $images[] = $image['url'];
}
shuffle($images);
$tenImages = array_slice($images, 0, 10);

编辑。,请考虑使用prepared statements的PDO。

更新。为什么不一次挑选十张图片呢?

代码语言:javascript
复制
$images = array();
while(count($images) < 10) {
    $req = mysql_query("SELECT url FROM images WHERE user_id = '{$row['userID']}' LIMIT " . rand(1, 10000) . ", 1");
    $image = mysql_result($req, 0, 0);
    if(!in_array($image)) {
        $images[] = $image;
    }
}

更有趣(也更快)的方式。提供了here。

代码语言:javascript
复制
$ids = array();
for($i = 0 ; $i < 1000 ; $i++) {
    $ids[] = rand(1, 10000);
}
$req = mysql_query("SELECT url FROM images WHERE user_id = '{$row['userID']}' AND id IN (" . implode(',', $ids) . ") LIMIT 10");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11836689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档