gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 05:41:11 27 4
gpt4 key购买 nike

我正在尝试从数据库中获取数据以创建复选框列表,如果特定用户上次已经选中它们,则将它们设置为 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com