Народна инициатива

Народна инициатива # 151; таблица връзка към MySQL

Четири причини, поради които не е необходимо да се предприемат писането на големи приложения за езиково обучение

Първоначално възнамерявах да направи излизането на "Народна инициатива" с колекция от грешки, допуснати в главната от мен :). Нещо, което съм събрал от грешките на традиционните елементи и т.н. Но животът е много по-интересно! Аз пиша за друга инициатива директно, без забавяне.

Така че някои хора го наричат ​​Вася пита обществен форум за MySQL.

Q:. Не е ясно как да се създаде връзка между масите, така че първото поле е автоматично вмъква данни на втория (ECHO и ECHO селективно с ID).

тип Varivant SELECT db.user, db.delete_priv, user.user, user.delete_priv ОТ db, ръководство КЪДЕ db.user = user.user не съвсем подходящ както за комуникация може да се нарече един участък.

О:. Аз честно казано не разбирам защо тази връзка не е за вас? Как тази връзка е удължена?

Q:. Е, не ми харесва връзката, въз основа на синтаксиса на заявка за търсене. Бих искал нещо по-съществено, в противен случай аз не виждам смисъл в ключовете и индексите.

О:. По-съществено - да кажеш графичния интерфейс на MS Access?

За съжаление, за достъп работи също толкова добре # 151; просто натиснете бутона "SQL", и ще видите връзката ", участък".

Q:. Аз просто по-просто софтуер за всичко това, добрата масичката направя. След като в MySQL, че не работи.

О:. Вместен линии, рекурсия? Кажи ми защо го направи база данни и таблици?

Q:. Не са вложени цикъла и рекурсия # 151; Четох н-ия kolmchestvo масиви и работа с тях вече. И направи връзката на базата на Selecta # 151; не е точно това, което ми трябва.

О:. Точно така. Запазване на всички в един файл, а след това на всички въпроси няма.

Като цяло, това е мой дълг да сортирате чрез таблици връзка.

Външния ключ, чек, и клаузи СПРАВКИ всъщност не правят нищо. Синтаксисът за тях се предоставя само за съвместимост, за да направи по-лесно да пренесете код от други SQL сървъри и да стартирате приложения, които създават таблици с препратки. Вижте раздел 5.4 Функционалност изчезнали от MySQL.

Комуникация без участък

Като цяло, не е преувеличение, описвайки отношенията в искането не беше не - в продължение на векове в базата данни работи по този начин. Достъп със стрелките и formopostroitelyami се появи много по-късно.

Как да обърка

Така например, по следния начин:

колони имена, получени от заявката и се съхраняват в масив # 36; втриване.

Сега изберете новината, а вместо избрания номер колона въведете съответния елемент от графите за масив.

Всъщност, можете да си спестите от необходимостта да се влача през цялата програма на този масив # 36; разтриване (и ако се отнася до функцията позиции - че поеме GLOBAL?), Възможността да се направи грешка с # 36; търкайте [# 36; ред [ "разтриване"]] - ако страницата няколко подобни искания, правописна грешка някъде лесно.

В допълнение, масива # 36; протриване изисква определено количество памет (като много колони?). Третата версия на PHP скрипт, отнема повече време, отколкото с помощта на таблицата на сдружаване, защото той интерпретира по линията на програмата, когато (за разлика от 4-ти, която събира на програмата и след това да се изпълнява).

В горния пример може да се прилага таблица сдружаване и да се отърве от недостатъците, описани.

Така че тук е по-добре да се използва заявката "SELECT sites.id, URL sites.name като SITENAME, rubs.name като rubsname, rubs.id като rub_id от сайтове, потрива КЪДЕ sites.rub = rubs.id". Оказва се, че ние трябва да се подготви на масите, се грижи за отнемането на само елементите и пишат по-малко код.

Синтаксисът за присъединяване маси

Лесна връзка - INNER JOIN:

SELECT ОТ таблица 1 INNER JOIN Таблица 2 ON table1.field1 = table2.field

SELECT ОТ Таблица 1, Таблица 2, КЪДЕТО table1.field1 = table2.field2

SELECT ОТ таблица 1 ВЪТРЕШНА УЧАСТВА В Таблица 2, използвайки (Field1)

ако таблиците са свързани с областта на поле 1.

Това съединение избрана линия само тези таблици, които съответстват на състоянието на присъединят - равенство от стойности на полетата. Ако не са налице съответните линия Таблица 1 редици от Таблица 2, ред пропуска резултат от заявката. Ако е необходимо да се преброят на сайтове в категория (продължава примера на каталога), такова искане не отговарят съвсем точно - само колони са в списъка, който има сайтове. За такава операция е необходимо да се използва ЛЯВА JOIN.

SELECT ОТ таблица 1 НАЛЯВО JOIN Таблица 2 ON table1.field1 = table2.field2

SELECT ОТ таблица 1 НАЛЯВО УЧАСТВА В Таблица 2, използвайки (Field1)

ако таблиците са свързани с областта на поле 1.

В този случай, съответния ред в Таблица 2 не може да бъде, а след това в областта на Таблица 2 получаваме NULL и ако работата на групата, както е случаят с броя на сайтовете в категорията, а в областта ще бъде 0:

SELECT rubs.id, име, COUNT (sites.id) като сайтове от трие LEFT JOIN сайтове rubs.id = sites.rub група чрез rubs.id

Забележка: този номер няма и в двете таблици, така че трябва да използвате името на една маса в тяхното предназначение. Между другото, ако съюзът не използва партида операции, по-добре е да се промени името на областта като оператор, за да се избегне объркване.

> Обединяване на таблици ужасно бавно
за бързо свързване на които комбинират, за да се наложи индексни полета. ОБЯСНЕТЕ изберете своя верен приятел и спътник. И можете да оптимизирате повече въпроси, прочетете раздел мана "5.2.6 Как MySQL Оптимизира НАЛЯВО JOIN и НАДЯСНО JOIN". Повече, може би, ако има други по-конкретни критерии за подбор КЪДЕ - за да ги поставят на първо място и след това да се присъедини.
Никога няма да повярвам, че програмно на клиента, може да осъществи свързването по-добре (efektivnosti), отколкото това ще направи базата данни.