php - 从特定用户以前从未见过的 mysql 表中提取一个随机 ID

标签 php mysql

使用 mysql 和 PHP,我想设置一个查询,从问题表中提取特定用户尚未看到的问题。

我有两个表,1) 问题表和 2) 记录表。

问题表有两个字段:p_id、prob。此表包含要显示给用户的问题列表。

记录表有4个字段:record_id、user_id、p_id、num_seen。每当用户看到特定问题时,都会记录用户的 ID (user_id)、他/她看到的问题 (p_id) 以及用户看到该问题的次数 (num_seen)。

我正在尝试编写的查询将从问题表中选择一个 p_id,条件是该 p_id 尚未被特定用户 (user_id) 查看。

这看起来应该很简单,但我尝试使用“WHERE problems.p_id != records.p_id AND user_id=$id”没有奏效。任何有关正确查询或获得所需结果的更好方法的建议都很棒。

最佳答案

SELECT p.* 
FROM   problems p 
       LEFT JOIN records r 
         ON r.user_id = 100 
            AND r.p_id = p.p_id 
WHERE  p.p_id IS NULL 
       AND p.p_id >= Rand() * (SELECT Max(p_id) 
                               FROM   problems) 
LIMIT  1 

其中 100 是当前的 user_id。

你需要索引

  • (问题.p_id)
  • (records.user_id,records.p_id)

关于php - 从特定用户以前从未见过的 mysql 表中提取一个随机 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5383351/

相关文章:

php - 根据字段值传递数据库字段 ID 的运行 SQL

javascript - 使用 jquery 验证动态输入字段

php - 在多对多关系 laravel 中命名表

php - 如何优化这些查询?

php - 仅在没有引用时引用复合键的一个字段和 'ON DELETE CASCADE'

mysql - 在 Django 程序中的数百个 MySQL UPDATE 语句期间禁用自动提交

datetime - 如何从包含 PHP 日期时间值的字符串中获取时区?

php - 如何加载 excel 模板并在 PHPExcel 中写入?

MySQL 查询太慢,我该如何改进?

php - 代理商销售报告,汇总所有销售额并按总销售额最小化显示结果