Модераторы: skyboy

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Еще раз о связывании таблиц 
V
    Опции темы
azesmcar
Дата 15.5.2009, 14:45 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 6
Всего: 211



Цитата(vikaz @  15.5.2009,  11:58 Найти цитируемый пост)
azesmcar, ты хочешь сказать, что код который находится выше, будет работать только если есть связь между таблицами? Просто я еще не проверил, только вечером. Но вопрос возник сейчас. 

что ты подразумеваешь под фразой - "если есть связь между таблицами"?
связь между таблицами это не какое-то физическое свойство, это просто - решил связать, назвал поля соответственно и связал в своих запросах..если речь идет о foreign-key то ответ: нет. Запрос будет работать и без foreign-key.

Это сообщение отредактировал(а) azesmcar - 15.5.2009, 14:50
PM   Вверх
vikaz
Дата 15.5.2009, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

Репутация: нет
Всего: 12



azesmcar, спасибо за разъяснение. "+" в бортовом журнале.....


--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
Gwire
Дата 16.5.2009, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 7.8.2007
Где: Николаев

Репутация: 1
Всего: 4



Цитата(azesmcar @  15.5.2009,  11:51 Найти цитируемый пост)
это не значит что так правильнее

А кто решает как правильно а как нет?
Если интерпритатор "хавает" запрос, значит он правилен.
Есть другие вопросы:
  Читабельность кода;
  Быстодействие инструкции;

В моём случаи
Цитата(Gwire @  15.5.2009,  11:44 Найти цитируемый пост)
Но это уже на любителя.

было бы логично - "это не значит что так рациональнее".

smile И с этим я соглашусь.


PM MAIL   Вверх
azesmcar
Дата 16.5.2009, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 6
Всего: 211



Цитата(Gwire @  16.5.2009,  09:53 Найти цитируемый пост)

А кто решает как правильно а как нет?
Если интерпритатор "хавает" запрос, значит он правилен.
Есть другие вопросы:
  Читабельность кода;
  Быстодействие инструкции;

Ну вообще-то да..речь именно об этом. Слово "правильно" здесь не касалось синтаксиса а скорее применительности. Насколько правильно применяеть этот метод. Если есть другой.

Цитата(Gwire @  16.5.2009,  09:53 Найти цитируемый пост)
было бы логично - "это не значит что так рациональнее".

да будет так smile 
PM   Вверх
Gwire
Дата 16.5.2009, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 7.8.2007
Где: Николаев

Репутация: 1
Всего: 4



azesmcar, я тут повел эксперемент. Создал 2 таблици 
Код
CREATE TABLE `test`.`person` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR( 16 ) NOT NULL 
) ENGINE = MYISAM ;

CREATE TABLE `test`.`barcode` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`person_id` INT NOT NULL ,
`code` VARCHAR( 32 ) NOT NULL 
) ENGINE = MYISAM ;
Заполнил их. В person 4053 записи.  barcode - 2281.
Хоть barcode.person_id не уникольное - записи не подторяются.

Выполняю следующие запросы
Код
/* (1) (2,281 всего, запрос занял 0.0184 сек.) */
SELECT p.name, b.code
  FROM person p, barcode b
  WHERE p.id = b.person_id    LIMIT 0, 5000;

/* (2) (2,281 всего, запрос занял 0.0168 сек.) */
SELECT p.name, b.code
  FROM person p INNER JOIN barcode b ON p.id = b.person_id    LIMIT 0, 5000;

/* (3) (4,053 всего, запрос занял 3.0334 сек.) */
SELECT p.name,
  (SELECT b.code FROM barcode b WHERE p.id = b.person_id) as code
  FROM person p    LIMIT 0, 5000;

/* (4) (4,053 всего, запрос занял 3.0758 сек.) */
SELECT p.name, b.code
  FROM person p LEFT JOIN barcode b ON p.id = b.person_id    LIMIT 0, 5000;

smile И вижу интересные результаты. Как это можно прокоментировать, кроме как почесать затылок.
Можно долго спорить, что приемлемей, но для себя я решил не заморачиватся попододу JOIN. smile 

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0473 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.