Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
я просто в двух таблицах один и тотже индекс определяю, а...27.02.04 13:56 Число просмотров: 1149 Автор: tdes@work Статус: Незарегистрированный пользователь
---
> Bills & Contracts связанны по индексу ContractID > Contracts & Clients связанны по индексу ClientID > Contracts & Products связанны по индексу ProductID > нужно связать JOIN все 4 таблицы. > правильно ли: > Bills INNER JOIN ( Clients INNER JOIN Contracts> USING(ClientID) INNER JOIN Products USING(ProductID) ) ON
> Bills.ContractID = Contracts.ContractID
> ???
> вроде работает, но есть сомнения > 10x
Каким образом ты в MySQL связываешь по индексу?
Вот я делаю:
CREATE TABLE one (
id int(11) NOT NULL default '0',
data varchar(100) default NULL,
PRIMARY KEY (id)
) TYPE=MyISAM;
CREATE TABLE many (
one_id int(11) NOT NULL default '0',
data varchar(100) default NULL,
FOREIGN KEY (one_id) REFERENCES one(id)
) TYPE=MyISAM;
---
Использую phpMyAdmin 2.5.6-rc1 вставляю это добро... все нормально хавает. Затем говорю ему экспортировать структуру БД - он мне дает точь-вточь тоже самое, но без выделенной строчки (FOREIGN KEY)!?
Вопрос: чей глюк?
1. Мой. Т.е. как-то отдельно надо индекс заводить.
2. phpMyAdmin-а
3. Или же MySQL не поддерживает FOREIGN KEY
Это не глюк, это MyISAM06.03.04 21:33 Автор: TLoD,Snake Статус: Незарегистрированный пользователь
> CREATE TABLE many ( > one_id int(11) NOT NULL default '0', > data varchar(100) default NULL, > FOREIGN KEY (one_id) REFERENCES one(id) > ) TYPE=MyISAM; > --- > > Использую phpMyAdmin 2.5.6-rc1 вставляю это добро... все > нормально хавает. Затем говорю ему экспортировать структуру > БД - он мне дает точь-вточь тоже самое, но без выделенной > строчки (FOREIGN KEY)!? > > Вопрос: чей глюк? > 1. Мой. Т.е. как-то отдельно надо индекс заводить. > 2. phpMyAdmin-а > 3. Или же MySQL не поддерживает FOREIGN KEY
4. Тип таблиц MyISAM не поддерживает внешние ключи, транзакции. Синтаксис MySQL проглатывает для совместимости со стандартами, но реально ничего не делает.
Внешние ключи и транзакции реализованы в MySQL при использовании InnoDB таблиц. Но пока ни один хостер на моей памяти такого не разрешил.
я просто в двух таблицах один и тотже индекс определяю, а...27.02.04 13:56 Автор: tdes@work Статус: Незарегистрированный пользователь
а кто-то может обяснить, как так получается в квери:
SELECT ProjectInvoices.*, Invoices.InvoiceID, Contracts.ContractID, Clients.ProjectID AS CPid
FROM ProjectInvoices LEFT JOIN (Invoices
INNER JOIN Contracts USING(ContractID)
INNER JOIN Clients ON (Clients.ClientID = Contracts.ClientID AND Clients.ProjectID = 3) )
ON (Invoices.TypeID = ProjectInvoices.Type )
WHERE ProjectInvoices.ProjectID = 3
GROUP By ProjectInvoices.Type
ORDER BY ProjectInvoices.Type
---
InvoiceID не NULL, хотя выделенная болдом часть не содержит ни одного ряда ?
так у тебя идет обьединение LEFT, которое обьединяет ВСЕ...02.03.04 10:32 Автор: sarutobi Статус: Незарегистрированный пользователь
> FROM ProjectInvoices LEFT JOIN (Invoices > INNER JOIN Contracts USING(ContractID) > --- > InvoiceID не NULL, хотя выделенная болдом часть не содержит > ни одного ряда ? так у тебя идет обьединение LEFT, которое обьединяет ВСЕ записи слева и непустые справа....
Смотри ситаксис команды JOIN и модификаторы LEFT, Natural Left, Inner, Right.
ага, а справа все записи "пустые" и тем не менее02.03.04 12:18 Автор: tdes@work Статус: Незарегистрированный пользователь