Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]jak dzialaja relacje w bazie mysql
michat34
post
Post #1





Grupa: Zarejestrowani
Postów: 200
Pomógł: 1
Dołączył: 4.08.2012

Ostrzeżenie: (10%)
X----


witam, na wikibooks czytam kurs o relacjach i jest taki przykład

  1. CREATE TABLE `kategorie` (
  2. `id` mediumint(9) NOT NULL AUTO_INCREMENT,
  3. `nazwa` VARCHAR(40) NOT NULL,
  4. `il_ksiazek` mediumint(9) DEFAULT NULL,
  5. PRIMARY KEY (`id`),
  6. KEY `il_ksiazek` (`il_ksiazek`)
  7. ) ENGINE=InnoDB;
  8.  
  9. INSERT INTO `kategorie` VALUES (1, 'Literatura polska', 4);
  10. INSERT INTO `kategorie` VALUES (2, 'Literatura zagraniczna', 2);
  11.  
  12. CREATE TABLE `ksiazki` (
  13. `id` INT(11) NOT NULL AUTO_INCREMENT,
  14. `nazwa` VARCHAR(100) NOT NULL,
  15. `wydawnictwo` VARCHAR(50) NOT NULL,
  16. `cena` FLOAT NOT NULL DEFAULT '0',
  17. `kategoria_id` mediumint(9) NOT NULL,
  18. PRIMARY KEY (`id`),
  19. KEY `kategoria_id` (`kategoria_id`)
  20. ) ENGINE=InnoDB;
  21.  
  22. INSERT INTO `ksiazki` VALUES (1, 'Hamlet', 'AAA', 6.5, 2);
  23. INSERT INTO `ksiazki` VALUES (2, 'Makbet', 'AAA', 6.8, 2);
  24. INSERT INTO `ksiazki` VALUES (3, 'Potop', 'BBB', 18.4, 1);
  25. INSERT INTO `ksiazki` VALUES (4, 'Quo vadis', 'BBB', 17.99, 1);
  26. INSERT INTO `ksiazki` VALUES (5, 'Pan Tadeusz', 'CCC', 13.78, 1);
  27. INSERT INTO `ksiazki` VALUES (6, 'Nad Niemnem', 'CCC', 15.45, 1);


"Przy każdym rekordzie w tabeli ksiazki pole kategoria_id przechowuje numeryczny ID rekordu kategorii, do którego dana książka jest przypisana."

po wpisaniu
SELECT kategorie.nazwa FROM ksiazki, kategorie WHERE kategorie.id = ksiazki.kategoria_id
AND ksiazki.id = 3;

pojawia sie

+-------------------+
| nazwa------------|
+-------------------+
| Literatura polska |
+-------------------+
1 row in set (0.02 sec)

czy moglibyscie mi wytłumaczyc w ktorym miejscu kategoria_id przechowuje numeryczny ID rekordu kategorii? czy chodzi o PRIMARY KEY (id)? jesli tak to skad wiadomo ze chodzi o id kategorii a nie id rekordu ksiazki? a takze wyjasnic dlaczego w zapytaniu wystepuje ta kropka? po prostu prosiłbym o wytłuamczenie mi podstaw działania relacji bo przeczytalem dwa kursy i nie do konca to rozumiem

Ten post edytował michat34 5.10.2012, 15:57:33
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
michat34
post
Post #2





Grupa: Zarejestrowani
Postów: 200
Pomógł: 1
Dołączył: 4.08.2012

Ostrzeżenie: (10%)
X----


KEY to zwykły indeks?

nie rozumiem uzycia kropek w zapytaniu, głownie o nie mi chodzi
Go to the top of the page
+Quote Post
sowiq
post
Post #3





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(michat34 @ 5.10.2012, 16:59:29 ) *
nie rozumiem uzycia kropek w zapytaniu, głownie o nie mi chodzi


Po pierwsze nie napisałeś, że o to Ci chodzi. Po drugie to na tyle oczywiste, że jakbyś się przez kilka sekund zastanowił, to sam byś do tego doszedł.

Kropką rozdzielana jest nazwa tabeli i nazwa kolumny. Jeśli robisz zapytanie z jednej tabelki, to wystarczy podawać nazwy kolumn. Ale jeśli (jak w Twoim przykładzie) wykonujesz zapytanie pobierające dane z kilku tabel, to przed nazwami kolumn dodaje się nazwy tabel, np.: tabela1.kolumna_x, tabela7.kolumna_56. Dodawanie nazwy tabeli jest w MySQL wymagane tylko jeśli w co najmniej dwóch tabelach, o które pytasz w zapytaniu, istnieją tak samo nazwane kolumny, o które pytasz.

Ten post edytował sowiq 5.10.2012, 16:07:15
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #4





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


Ech, sowiq
Cytat(sowiq @ 5.10.2012, 17:05:05 ) *
Dodawanie nazwy tabeli jest w MySQL wymagane tylko jeśli w co najmniej dwóch tabelach, o które pytasz w zapytaniu, istnieją tak samo nazwane kolumny, o które pytasz.

Nieprawda.
Nie zawsze jest wymagane. Należy podać (jeśli są takie same pola) przy: łączeniu (JOIN), warunkach (WHERE), sortowaniu (ORDER BY) i grupowaniu(GROUP BY).
Przy zwykłym SELECT nie musi być... Problemy jakie z tego wynikną - cóż, takie same, jakby były prefiksowane nazwą tabeli... Znacznie lepiej takie pola dodatkowo aliasować.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 13.10.2025 - 18:59