我试图从2个表中获取结果,其中一个表具有以下结构:
CREATE TABLE `users`
(
`id` bigint (20) NOT NULL AUTO_INCREMENT ,
`firstname` varchar (255) NOT NULL,
`lastname` varchar (255) NOT NULL,
`sex` varchar (255) NOT NULL,
`orientation` varchar (50),
`email` varchar (255) NOT NULL,
`altemail` varchar (255),
`username` varchar (255) NOT NULL,
`password` varchar (255) NOT NULL,
`school` varchar (255) NOT NULL,
`age` date NOT NULL,
`image1` varchar (255),
`image2` varchar (255),
`image3` varchar (255),
`image4` varchar (255),
`image5` varchar (255),
`music` longtext,
`movies` longtext,
`tv` longtext,
`books` longtext,
`saysomething` longtext,
`course` varchar (255),
`YEAR` integer (11),
`verified` varchar (255),
`verifieddatetime` datetime,
`string` varchar (255),
`alerts` varchar (50),
PRIMARY KEY (`id`)
)
具有以下结构:
CREATE TABLE `timetable`
(
`id` bigint (20) NOT NULL AUTO_INCREMENT ,
`studentid` varchar (255),
`classno` varchar (50),
`classname` varchar (255),
`classnumber` varchar (255),
`prof` varchar (255),
PRIMARY KEY (`id`)
)
用户名存储为时间表中的外键。每个学生都在时间表中输入他们的课程。尝试执行搜索结果,该搜索结果将生成与当前用户在同一所在学校的同一班级中的所有人员。需要返回users表中的id,firstname,lastname,image1字段以及时间表表的classname,classnumber。我有以下查询来从同一所学校的用户那里获取结果:
$query = "select users.id, users.firstname, users.lastname, users.age, users.image1, users.school, category.category from users, category where users.image1 !='male.gif' and users.image1 !='female.gif' and users.verified ='yes' and users.username !='$_SESSION[myusername]' and users.school = '$school' and users.school = category.cat_id";
但我无法弄清楚如何抓住课程。任何帮助将不胜感激。感谢。
答案 0 :(得分:1)
我不知道表timetable
在这个查询中有趣的地方 - 它不包括在内。
但是,我有一些设计问题/提示:
timetable.studentid
最好是bigint (20) NOT NULL
。male.gif
和female.gif
?这应该来自性别领域,而不是其他方式。$_SESSION[myusername]
的来源,您很容易受到SQL注入攻击。不要忘记使用mysql_real_escape()
。答案 1 :(得分:0)
SELECT
users.id,
users.firstname,
users.lastname,
users.age,
users.image1,
users.school,
category.category,
timetable.classname,
timetable.classnumber
FROM
users
INNER JOIN
category
ON
users.school = category.cat_id
INNER JOIN
timetable
ON
timetable.studentid = users.id
INNER JOIN
(
SELECT
classno
FROM
timetable
WHERE
studentid = $id_of_the_user
) classes_of_the_one_user
ON
classes_of_the_one_user.classno = timetable.classno
WHERE
users.image1 != 'male.gif'
AND
users.image1 != 'female.gif'
AND
users.verified = 'yes'
AND
users.school = '$school'