mysql - 从 mysql 中的两个表获取数据,连接在这里不起作用

标签 mysql

我正在尝试从数据库中获取数据以创建复选框列表,如果特定用户上次已经选中它们,则将它们设置为 checked="checked"。 .

所以我有两个表 - 一个是专业表,其中包含专业名称和专业 ID。

另一个是user_specialties,它有一个用户id(uid)和specialty id(sid)...

问题是我无法获得所有专业的完整列表,以及来自 user_specialties 的相应数据 - 并且不知道要检查哪些复选框...

我尝试了以下方法:

function genspecialties($id = 0) {
  $query =  "select * from specialties s RIGHT JOIN user_specialty us on s.id = us.sid ";

此查询将使我获得与人们拥有相同专业的次数,多次为每个用户提供相同专业......不好:/

所以我想也许:

$query =  "select * from specialties s RIGHT JOIN user_specialty us on s.id = us.sid where us.uid = '$id' ";

但这也不好,因为(当然)它只带回了用户拥有的专长,并跳过了他不拥有的专长....

所以,也许有人知道我怎样才能获得所有的专业,以及用户是否拥有的引用资料? 我在 PHP 中使用 mysql ... 谢谢! 亚尼潘

最佳答案

如果我理解正确,这应该可以满足您的需求:

$result = mysql_query("SELECT (specName, (IF EXISTS (SELECT * FROM user_specialty us WHERE s.id = us.sid AND us.uid = '$id' LIMIT 1))) FROM specialities s;");
while (list($spec, $checked) = mysql_fetch_array($result)) {
    // Do your outputting here.
}

编辑

根据您的要求,我将继续解释查询。可能让您感到困惑的部分是这个子查询:

(IF EXISTS (SELECT * FROM user_specialty us WHERE s.id = us.sid AND us.uid = '$id' LIMIT 1))

IF EXISTS 告诉 MySQL 如果紧随其后的部分“存在”(包含结果)则返回 TRUE 或 FALSE。 SELECT * FROM user_specialty us WHERE s.id = us.sid AND us.uid = '$id' LIMIT 1 只是告诉 MySQL 在 user_specialty 中找到一行s.id = us.sid(专业 ID 匹配)和 us.uid = '$id'(ID 是用户的)。

关于mysql - 从 mysql 中的两个表获取数据,连接在这里不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6724183/

相关文章:

java - 将好友列表实现到数据库中的最佳方法? MySQL

mysql - 过滤 mysql 输出以仅打印您需要的内容

MYSQL基于CURRENT_TIME的简单IF语句

mysql - 执行 LIKE 时忽略记录

mysql - 嵌套查询中的 SQL IN 运算符

mysql - 仅显示具有两种类型记录的客户并且仅显示这些记录

php - 如何在通过 fopen 创建的 php 文件中包含变量

mysql - perl,mysql - 将 csv 文件上传到 mysql 的快速方法?

mysql - 查询中的累计金额

python - 将数据发布到 Sentiment140 进行情绪分析