Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: помогите написать WHERE :-[
 
 автор: hate   (28.04.2006 в 23:41)   письмо автору
 
 

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

Только вот синтаксис неправильный.. Подскажите плиз..

Где можно посмотреть как делать сложные запросы? (типа от простого к сложному) ?

   
 
 автор: codexomega   (29.04.2006 в 00:37)   письмо автору
 
   для: 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;

   
 
 автор: hate   (29.04.2006 в 03:13)   письмо автору
 
   для: codexomega   (29.04.2006 в 00:37)
 

ага, пачти, спасибо, а как зделать чтобполученных значенй было не по 2 а по 1му?

видимо както надо хитро таблицы заJOINить, но у меня чтото не получается..

   
 
 автор: targa   (29.04.2006 в 03:56)   письмо автору
 
   для: 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   (29.04.2006 в 04:19)   письмо автору
 
   для: 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'

Но эт неправельно потому, что одна и таже группа выдаётся несколько раз..

   
 
 автор: cheops   (29.04.2006 в 09:58)   письмо автору
 
   для: 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 поле_группировки

   
 
 автор: targa   (29.04.2006 в 16:45)   письмо автору
 
   для: cheops   (29.04.2006 в 09:58)
 

Можно еще DISTINCT юзать, чтоб убирать дублирующиеся строки, хотя никак не пойму в чем разница (но результат тот же). Может cheops разъяснит?

   
 
 автор: cheops   (29.04.2006 в 23:24)   письмо автору
 
   для: targa   (29.04.2006 в 16:45)
 

DISTINCT - это простейшее средство избавится от дублирующих записей в одном из полей. GROUP BY - это сложная SQL-конструкция - в простейшем случае действует как DISTINCT, но группировка может производится не по одному, а по нескольким полям. Более того существует целый класс, так называемых агрегатных функций (MIN(), MAX(), COUNT() и т.п.), которые работают совместно с конструкцией GROUP BY. Т.е. вообще говоря уникальные значения это одно из свойств GROUP BY, а для DISTINCT - основная цель.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования