【问题标题】:Using Limit random on mysql在mysql上使用限制随机
【发布时间】:2013-10-05 21:45:36
【问题描述】:

我刚刚使用了这个查询

SELECT * FROM questions 
ORDER BY RAND()
LIMIT 20;

在 mysql 数据库上,我有一个名为 display 的列(以及问题的列),其中的值等于 1。所以现在你可以在查询中看到,我限制为 20。我想更改全部 20 个要显示=0。我知道这是查询

update test3
set display=0
where id=11;

但这只是设置一行的显示。我如何为 20 行设置。 提前致谢。

【问题讨论】:

    标签: mysql sql database random limit


    【解决方案1】:

    你可以这样做

    update test3
    set display=0 
    where id in (select id from questions order by rand() limit 20);
    

    假设你使用的是 php。

    $result = msyql_query("select id from questions order by rand() limit 20");
    
    $ids = array();
    
    while($row = msyql_fetch_assoc($result)){
        $ids[] = $row['id'];  
    }
    

    根据您的情况,首先执行第一个查询并保存第一个查询的 id。

    假设您使用的是 php,并且您已将第一个查询的 id 保存在 $ids

    你可以像这样运行第二个查询;

    $idstring = implode(',',$ids);
    
    $query = 'update test3 set display=0 where id in ('.$idstring.' )';
    
    $result = mysql_query($query);
    

    【讨论】:

    • 我相信这会起作用。但对我不起作用,我会告诉你为什么。在我的示例中执行第一个查询后,我需要显示它,然后我需要输入 0在该 id 的显示列中。因为在我上面的问题中的 2 个查询之间,我使用了一个 if 语句,我说如果 display=1,则显示问题。所以我需要单独使用查询,所以如果有其他方法可能的话。
    • 我真的不懂php,也不懂mysql(只知道创建和CRUD数据库),所以如果你能告诉我在我第一次查询后如何保存ID?
    • 知道如何用 java 做吗?
    • 我不知道如何在java中做到这一点。
    • 我告诉过你我不懂php,甚至不知道在哪里添加这段代码。无论如何感谢您的帮助,但如果可能的话,我更喜欢java或纯mysql ..再次感谢
    【解决方案2】:

    使用WHERE 子句搜索子查询

    UPDATE test3
    SET display = 0
    WHERE id IN (
    SELECT id FROM questions 
    ORDER BY RAND()
    LIMIT 20)
    

    如果您想在 SELECTUPDATE 之间执行某些操作,请尝试以下操作:

    CREATE TABLE #Temp (
        division TINYINT
    )
    
    INSERT INTO #Temp 
    SELECT id FROM questions 
    ORDER BY RAND()
    LIMIT 20
    
    --SELECT * FROM #Temp
    
    UPDATE test3
    SET display = 0
    WHERE id IN (
    SELECT division FROM #Temp)
    

    【讨论】:

    • 我相信这会起作用。但对我不起作用,我会告诉你为什么。在我的示例中执行第一个查询后,我需要显示它,然后我需要输入 0在该 id 的显示列中。因为在我上面的问题中的 2 个查询之间,我使用了一个 if 语句,我说如果 display=1,则显示问题。所以我需要单独使用查询,所以如果有其他可能的方式。
    • 请查看我的编辑,看看是否适合您。注意我不是 100% 熟悉 MySQL 中 TempTables 的动态,但我不认为 T-SQL 有那么不同。
    • 感谢您的帮助。但是我没有得到上面的查询。我将用 java 写这个,所以我不知道该怎么写。无论如何,谢谢帮助。
    • 我们正在创建一个临时表(您可以修改它以存储questions 的全部内容)。然后我们将部门 id 存储到临时表中。这允许我们做任何我们想做的事情 test3 而无需重新生成随机 ID,因为临时表将包含我们之前选择的内容。
    猜你喜欢
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 2012-10-28
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 2021-10-15
    相关资源
    最近更新 更多