MySQL查询问题

时间:2011-08-14 22:18:23

标签: php mysql

我试图从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"; 

但我无法弄清楚如何抓住课程。任何帮助将不胜感激。感谢。

2 个答案:

答案 0 :(得分:1)

我不知道表timetable在这个查询中有趣的地方 - 它不包括在内。

但是,我有一些设计问题/提示:

  1. timetable.studentid最好是bigint (20) NOT NULL
  2. 您应该为学生的性别设置单独的字段。我想有一张图片显示性别 - male.giffemale.gif?这应该来自性别领域,而不是其他方式。
  3. 根据$_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'