|
|
|
| SELECT lesson.id,lesson.title FROM lesson,teacher WHERE **** ORDER BY lesson.title
пример поля lessons из таблицы teacher : |1|2| , где 1, 2 - айдишники таблицы lessons
пример поля id из таблицы lesson : 1 (просто айди).
Так вот, нужно выбрать те предметы, которые препод ведёт.
тоесть должно быть чтото типа locate('|lesson.id|','teacher.lessons') >0
Только вот синтаксис неправильный.. Подскажите плиз..
Где можно посмотреть как делать сложные запросы? (типа от простого к сложному) ? | |
|
|
|
|
|
|
|
для: hate
(28.04.2006 в 23:41)
| | Я так понимаю:
Lesson(Lesson_Id, Lesson_Title)
Teacher(Teacher_Id, Teacher_Name, Lesson_Id )
SELECT Lesson_Title FROM Lesson,Teacher WHERE Lesson.Lesson_Id = Teacher.Lesson_Id ORDER BY Lesson_Title;
|
| |
|
|
|
|
|
|
|
для: codexomega
(29.04.2006 в 00:37)
| | ага, пачти, спасибо, а как зделать чтобполученных значенй было не по 2 а по 1му?
видимо както надо хитро таблицы заJOINить, но у меня чтото не получается.. | |
|
|
|
|
|
|
|
для: codexomega
(29.04.2006 в 00:37)
| |
SELECT Lesson_Title FROM Lesson,Teacher WHERE Lesson.Lesson_Id = Teacher.Lesson_Id ORDER BY Lesson_Title;
|
А почему Lesson,Teacher? Я всегда думал, что после FROM указывается одна таблица...
2 hate:
Можете так попробовать:
SELECT Lesson.Lesson_Title FROM Teacher JOIN Lesson.Lesson_Id = Teacher.Lesson_Id ORDER BY Teacher.Teacher_Name, Lesson.Lesson_Title;
|
| |
|
|
|
|
|
|
|
для: hate
(28.04.2006 в 23:41)
| | Вобщем уже 10 часов сижу над решением этой задачки, раньше не приходилось сложные запросы писать.. Уже башку сломал и 10 раз базу переделал. Вобщем:
-- Предмет
CREATE TABLE 'lesson' (
'id' int(11) NOT NULL auto_increment,
'title' varchar(100) NOT NULL default '',
PRIMARY KEY ('id')
);
-- Группа
CREATE TABLE 's_group' (
'number' varchar(100) NOT NULL default '',
'course' int(11) NOT NULL default '1',
PRIMARY KEY ('number')
);
-- Препод
CREATE TABLE 'teacher' (
'id' int(11) NOT NULL auto_increment,
'surname' varchar(100) NOT NULL default '',
'name' varchar(100) NOT NULL default '',
'patronymic' varchar(100) NOT NULL default '',
'foto' varchar(30) NOT NULL default '',
'chair' int(11) NOT NULL default '0',
'login' varchar(10) NOT NULL default '',
'path' varchar(10) NOT NULL default '',
PRIMARY KEY ('id')
);
-- Вспомогательная таблица, незнаю, как её абазвать, это чтоб связать предмет, группу и препода
CREATE TABLE 'program' (
'lesson' int(11) NOT NULL default '0',
'group' varchar(100) NOT NULL default '',
'teacher' int(11) NOT NULL default '0',
'arch' enum('0','1') NOT NULL default '1',
PRIMARY KEY ('lesson','group')
);
|
Я пытаюсь показать преподу, в каких группах он препадаёт.
пока дошол до
SELECT number FROM s_group LEFT JOIN program ON s_group.number=program.group WHERE program.teacher LIKE '$this->login'
|
Но эт неправельно потому, что одна и таже группа выдаётся несколько раз.. | |
|
|
|
|
|
|
|
для: hate
(29.04.2006 в 04:19)
| | Когда используется многотабличный запрос, необходимо производить группировку результирующей таблицы при помощи конструкции GROUP BY
SELECT number FROM s_group LEFT JOIN program ON s_group.number=program.group WHERE program.teacher LIKE '$this->login' GROUP BY поле_группировки
|
| |
|
|
|
|
|
|
|
для: cheops
(29.04.2006 в 09:58)
| | Можно еще DISTINCT юзать, чтоб убирать дублирующиеся строки, хотя никак не пойму в чем разница (но результат тот же). Может cheops разъяснит? | |
|
|
|
|
|
|
|
для: targa
(29.04.2006 в 16:45)
| | DISTINCT - это простейшее средство избавится от дублирующих записей в одном из полей. GROUP BY - это сложная SQL-конструкция - в простейшем случае действует как DISTINCT, но группировка может производится не по одному, а по нескольким полям. Более того существует целый класс, так называемых агрегатных функций (MIN(), MAX(), COUNT() и т.п.), которые работают совместно с конструкцией GROUP BY. Т.е. вообще говоря уникальные значения это одно из свойств GROUP BY, а для DISTINCT - основная цель. | |
|
|
|