вопрос по SQL

steklo
На сайте с 29.05.2006
Offline
44
494

Долго думал, как объяснить проблему, чтобы было пнятно. Попытаюсь максимально упростить.

Пусть есть Таблица "школы", содержащая информацию о школах.

У нее есть подчиненная таблица "классы" - список классов.

А у нее в свою очередь есть подчиненная таблица "ученики".

Каким SQL запросом вывести таблицу со всеми учениками, которые учатся в определенной школе?

Простите, если вопрос покажется дебильным, я начинающий.

Заранее спасибо за ответы

Витражи (http://www.zasteklom.biz)|Настенные часы (http://www.glasstime.ru)|Стекло для фьюзинга (http://www.glassonline.ru)
Kolyaj
На сайте с 28.03.2006
Offline
69
#1

Тоже не гуру, но все-таки:

Select * from (школы join классы on школы.id=классы.id_школы) join ученики on классы.id=ученики.id_класса where школы.id=id_школы

Хотя это наверно не лучший вариант.

B
На сайте с 26.12.2006
Offline
51
#2

все зависит от структуры таблиц

если ее сделать в таком виде:

tb_school

id

name

adress

...

tb_class

id

name

school_id

...

tb_neuch

id

name

school_id

class_id

то запрос будет довольно простой и по ресурсам тоже...

SELECT * FROM tb_neuch n WHERE n.school_id=$school_id

если структура таблиц такая:

tb_school

id

name

adress

...

tb_class

id

name

...

tb_neuch

id

name

...

tb_relations

school_id

class_id

neuch_id

то так:

SELECT n.* FROM tb_neuch n, tb_relations r WHERE n.id=r.neuch_id AND r.school_id=$school_id

в данном случае со школами рекомендую использовать первый вариант,

но если например делаешь для университетов тоже самое то лучше второй, т.к. один студент может одновременно обучаться в нескольких вузах что в первом варианте не удасться реализовать а второй вариант как раз подразумевает нахождение ученика в нескольких вузах.

PHP,MySQL,JavaScript,AJAX
steklo
На сайте с 29.05.2006
Offline
44
#3
bleed:

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

Нет, на самом деле, задача вполне взрослая и никакого отношения к системе образования не имеет.:) Я просто попытался объяснить простыми понятными всем терминамии мне казалось, что будет понятно. Возможно, получилось не очень удачно. Тем не менее, структура такая:

tb_school

id

name

adress

...

tb_class

id

name

school_id

...

tb_neuch

id

name

class_id

БЕЗ school_id в последней таблице!!! ибо с точки зрения нормализации таблиц данное поле будет лишним. Соответственно, в обоих случаях отношение "один-ко-многим"

D
На сайте с 14.01.2007
Offline
153
#4

тогда Kolyaj вроде правильно написал

B
На сайте с 26.12.2006
Offline
51
#5
steklo:
Нет, на самом деле, задача вполне взрослая и никакого отношения к системе образования не имеет.:) Я просто попытался объяснить простыми понятными всем терминамии мне казалось, что будет понятно. Возможно, получилось не очень удачно. Тем не менее, структура такая:

tb_school
id
name
adress
...

tb_class
id
name
school_id
...

tb_neuch
id
name
class_id

вот со структуры и нужно было начинать;)

SELECT n.* FROM tb_neuch n, tb_class c WHERE n.class_id=c.id AND c.school_id=$school_id
steklo:
БЕЗ school_id в последней таблице!!! ибо с точки зрения нормализации таблиц данное поле будет лишним. Соответственно, в обоих случаях отношение "один-ко-многим"

это все верно, но довольно часто "плохая" реализация экономит деньги на покупке еще одного сервера;)

не по нял по поводу "один-ко-многим"... в вашей реализации один ученик в одном классе, в одной школе

SZ
На сайте с 17.08.2005
Offline
63
#6

А если так? Тоже не шибко хорошо, но вроде получше join'ов будет.

SELECT класс.id, класс.school_id, неуч.* WHERE класс.school_id=N AND неуч.class_id=класс.id
steklo
На сайте с 29.05.2006
Offline
44
#7
bleed:
не по нял по поводу "один-ко-многим"... в вашей реализации один ученик в одном классе, в одной школе

ну, много классов к одной школе, много учеников к одному классу. Честно говоря, не знаю, как еще может быть...

B
На сайте с 26.12.2006
Offline
51
#8
steklo:
ну, много классов к одной школе, много учеников к одному классу. Честно говоря, не знаю, как еще может быть...

ну это же очевидно:)

ладно проехали.;)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий