Народна инициатива
Народна инициатива # 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
SELECT
SELECT
ако таблиците са свързани с областта на поле 1.
Това съединение избрана линия само тези таблици, които съответстват на състоянието на присъединят - равенство от стойности на полетата. Ако не са налице съответните линия Таблица 1 редици от Таблица 2, ред пропуска резултат от заявката. Ако е необходимо да се преброят на сайтове в категория (продължава примера на каталога), такова искане не отговарят съвсем точно - само колони са в списъка, който има сайтове. За такава операция е необходимо да се използва ЛЯВА JOIN.
SELECT
SELECT
ако таблиците са свързани с областта на поле 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), отколкото това ще направи базата данни.