我试图从数据库中获取数据,以便创建一个复选框列表,并将它们设置为checked="checked"
,如果特定用户上次已经选中了它们…
所以我有两个表-一个是专业表,其中有专业名称和专业ID。
另一个是user_specialties,它有用户id (uid)和专业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' ";
但这也不好,因为(当然)它只带回了用户的特长,而跳过了那些他不具备的....
那么,也许有人知道我怎么才能得到所有的专业,如果用户有或没有参考?我使用mysql与PHP…谢谢!Yanipan
如果我理解正确的话,这应该可以满足您的需求:
$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是用户的)的行。
我想你已经有了你需要的所有工具。
无论在哪里创建复选框,只需将其创建为未选中,然后对结果集进行传递,查看是否有需要选中的复选框,并仅选中这些复选框。
这应该是您需要的。第三个字段列出是否已检查或NULL。
$result = mysql_query("SELECT s.id, s.name, (SELECT 'checked' FROM specialties AS s2 JOIN user_specialties AS us ON s2.id = us.sid WHERE uid = '$id' AND s.id = s2.id ) AS checked FROM specialties AS s;")