информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяВсе любят медАтака на Internet
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / beginners
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
я просто в двух таблицах один и тотже индекс определяю, а... 27.02.04 13:56  Число просмотров: 1149
Автор: tdes@work Статус: Незарегистрированный пользователь
<"чистая" ссылка>
я просто в двух таблицах один и тотже индекс определяю, а твой пример и в других клиентах не работает, видимо MySQL не поддерживает FOREIGN KEY
<beginners>
MySQL - op JOIN 26.02.04 16:30   [whiletrue]
Автор: tdes@work Статус: Незарегистрированный пользователь
<"чистая" ссылка>
предположим следующую иерархию в db:
           Bills
             |
       Contracts  
         /        \
Clients     Products

---
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
У меня вопросик есть 27.02.04 11:38  
Автор: whiletrue <Роман> Статус: Elderman
<"чистая" ссылка>
> предположим следующую иерархию в db:
>
> 	   Bills
> 	     |
>        Contracts  
> 	 /	  \
> Clients     Products
> 

---
> 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
Это не глюк, это MyISAM 06.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 Статус: Незарегистрированный пользователь
<"чистая" ссылка>
я просто в двух таблицах один и тотже индекс определяю, а твой пример и в других клиентах не работает, видимо MySQL не поддерживает FOREIGN KEY
а кто-то может обяснить, как так получается в квери: 26.02.04 17:54  
Автор: 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 Статус: Незарегистрированный пользователь
<"чистая" ссылка>

> так у тебя идет обьединение LEFT, которое обьединяет ВСЕ
> записи слева и непустые справа....
ага, а справа все записи "пустые" и тем не менее
Ты уверен в том, что не возвражает ряды данных? 26.02.04 22:49  
Автор: Den <Денис Т.> Статус: The Elderman
<"чистая" ссылка>
Этот запрос возвращает данные?

select  * from Invoices
    INNER JOIN Contracts USING(ContractID)
    INNER JOIN Clients  ON Clients.ClientID = Contracts.ClientID
  where  Clients.ProjectID = 3

---
в том то и дело, что не возвращает ничего 27.02.04 11:23  
Автор: tdes@ Статус: Незарегистрированный пользователь
<"чистая" ссылка>
и только изменение InvoiceID на 26.02.04 18:25  
Автор: tdes@work Статус: Незарегистрированный пользователь
<"чистая" ссылка>
и только изменение InvoiceID на
MAX(IF(Clients.ProjectID = 75, Invoices.InvoiceID, NULL)) AS InvoiceID помoгает
Насколько я смыслю в колбасных обрезках - inner join... 26.02.04 17:14  
Автор: whiletrue <Роман> Статус: Elderman
<"чистая" ссылка>
> предположим следующую иерархию в db:
>
> 	   Bills
> 	     |
>        Contracts  
> 	 /	  \
> Clients     Products
> 

---
> 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

Насколько я смыслю в колбасных обрезках - inner join обладает ассоциативностью и коммутативностью, т.е. таблицы можно связывать в любом порядке.
Re: MySQL - op JOIN 26.02.04 17:02  
Автор: Den <Денис Т.> Статус: The Elderman
<"чистая" ссылка>
Я не совсем знаком с нотацией MySQL, но так как утверждается, что MySQL поддерживает нотацию ANSI SQL '92 то можно попробовать так:

select * from Bills
  inner join Contracts on Contracts.ContractID = Bills.ContractID
  inner join Products on Products.ProductID = Contracts.ProductID
  inner join Clients on Client.ClientID = Contracts.ClientID

---

или так

select * from Bills
  inner join Contracts (
    inner join Products on Products.ProductID = Contracts.ProductID
    inner join Clients on Client.ClientID = Contracts.ClientID
      ) on Contracts.ContractID = Bills.ContractID

---
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach