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