Внутренний вопрос о присоединении - PullRequest
0 голосов
/ 04 мая 2009
CREATE TABLE college 
(  
  id       SERIAL PRIMARY KEY, 
  SCHOOL   VARCHAR(100),
  CColor   VARCHAR(100),  
  CCmascot VARCHAR(100)  
);

CREATE TABLE mats 
(  
  id                SERIAL PRIMARY KEY,  
  CColor            VARCHAR(100),  
  CCNAME            VARCHAR(100)  
);

MYSQL Итак, вот проблема, я думаю, это довольно просто, но я не понимаю это правильно. У меня есть имя SCHOOL, переданное мне через URL, и я использую $ _GET, чтобы получить название колледжа, теперь мне нужно запросить:
Используя имя SCHOOL, мне нужно получить CCOLOR и CCNAME.

Ответы [ 4 ]

1 голос
/ 04 мая 2009

Ваш вопрос неясен, поэтому ответ может быть только приблизительным. Вам нужны столбцы в обеих таблицах, которые можно использовать для их объединения, то есть столбцы, в которых есть значения, которые можно использовать для определения, когда запись / записи в родительской таблице (колледже) соответствуют записи / записи в дочерней таблице (маты) , В идеале у вас должен быть внешний ключ в дочерних таблицах таблиц, который может называться College_id (при этом используется соглашение об именах, которое ссылается на родительскую таблицу).

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

select
  college.ccolor
from
  college inner join mats
    on college.id = mats.college_id
where
  mats.ccname = "<<COLOUR_DESIRED>>";

при условии, что ccname является именем ccolor.

0 голосов
/ 04 мая 2009

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

Когда вы знаете, почему и зачем реляционное моделирование, вам может понадобиться обойтись без них (хотя это и не рекомендуется, если у вас нет веских причин), но сейчас используйте их, чтобы явно определить, как таблицы связаны друг с другом.

В противном случае ваш вопрос похож на вопрос шеф-повара: «У меня есть немаркированные банки с едой, и я думаю, что это орегано. Как приготовить романтический ужин на двоих?» (Ммм ... что в банках ??)

Внешний ключ: http://dev.mysql.com/doc/refman/5.1/en/ansi-diff-foreign-keys.html

Присоединиться к документации: http://dev.mysql.com/doc/refman/5.1/en/join.html

0 голосов
/ 04 мая 2009

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

Атрибутом связи является CColor.

Ваш запрос должен выглядеть примерно так:

select
    m.ccname, m.ccolor
from
    mats m
inner join
    college c
on
    c.ccolor = m.ccolor
where
    c.school = @myVariable
0 голосов
/ 04 мая 2009
SELECT college.CColor FROM college
    INNER JOIN mats ON college.CColor = mats.CColor 
    AND mats.CColor = 'your query'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...