php - 带连接的 SQL SELECT 可排除用户已回答的项目

标签 php html mysql sql database

所以我正在尝试进行某种网络应用程序测验。 人们将能够向数据库提交自己的问题,并能够参加 10 个随机对/错问题的测验。

我想编写一个 sql select 来获取以下问题:

1- 未由登录用户上传

2- 登录用户尚未回答

目前我有这个:($userid = 登录用户 ID)

        public function selectNewRandom($userid){

    $sql = "SELECT `questions`.`id`, `questions`.`quest`, `questions`.`answ`, `questions`.`uploader_id`,`answers`.`item_id`, `answers`.`user_id` FROM `questions` LEFT JOIN `answers` ON `questions`.`id` = `answers`.`question_id` WHERE `questions`.`uploader_id` != $userid AND (`answers`.`user_id` IS null OR `answers`.`user_id` != $userid) ORDER BY RAND()";
    $stmt = $this->pdo->prepare($sql);
    $stmt->bindValue(':id', $id);
    $stmt->execute();
    return $stmt->fetch(PDO::FETCH_ASSOC);
}

获得 1 个不违反上述规则的新问题。 我的数据库布局是:

问题

-id

-任务

-答案

-uploader_id

答案

-id

-question_id

-user_id

-已回答(1/0 正确错误)

这对于第一个用户来说效果很好,他只会得到独特且未回答的问题。但是一旦第二个用户登录,我认为该命令正在做的是: 他在answers表中找到question_id,看到不同的user_id并停止检查并只允许返回该问题,即使他也回答了该问题但sql从不检查。 ?那么是否有一种方法可以检查答案表中是否没有 1 个条目同时具有等于问题 id 的 Question_id 和等于 $userid (=$_SESSION['user']['id']) 的 user_id

有没有办法解决这个问题,编写另一个 SELECT 查询或以不同的方式执行它,也许是 php?..(返回 10 个问题的数组也可以..)

[摘要]

它会检查答案表中带有问题 id 的每个项目,如果其中一个项目的 user_id 等于登录用户,则从结果中排除该项目。如果回答的表为空,则工作正常,最终不再显示新问题...但如果您随后使用其他用户登录,则不会排除已回答的任何问题。

最佳答案

您需要在 ON 子句中比较 answeruserid

SELECT q.`id`, q.`quest`, q.`answ`, q.`uploader_id`, a.`item_id`, a.`user_id`
FROM `questions` q
LEFT JOIN `answers` a
  ON q.`id` = a.`question_id` AND a.`user_id` = $userid
WHERE q.`uploader_id` != $userid AND a.`user_id` IS NULL
ORDER BY RAND()

您也可以使用 EXISTS 来编写此内容,但我更喜欢自己使用 JOIN

基本上,这句话的意思是,“给我所有剩下的问题以及我们用户的答案(忽略其他人的答案)。然后扔掉我们用户上传的问题,并扔掉有答案的问题。”

这样您就得到了您想要的内容 - 用户未上传或回答的问题。

关于php - 带连接的 SQL SELECT 可排除用户已回答的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26788030/

相关文章:

php - 多个 AND 条件 MySQL

php - Laravel 需要 Mcrypt PHP 扩展

php - 如何从 Controller 在后台运行 php artisan 命令?

php - wordpress仪表板左侧栏中的空白区域

mysql - 在 INFLUX DB 中为重复条目更新现有记录并为新条目插入记录(类似于 MySQL 中的 ON DUPLICATE KEY UPDATE)

mysql - 启动应用程序一段时间后 uwsgi 出现两个 MySql 错误

php - 如何动态设置模板属性(包括CSS)PHP

javascript - 如何显示长时间非 ajax 操作的繁忙指示器?

html - 表格内的表格 - 垂直放置元素而不是水平放置

php - 从表格行填充表单