Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Problem z relacją na dwóch różnych serwerach
Forum PHP.pl > Forum > Przedszkole
Radek_1
Mam dwie tabele o mniejwięcej takiej strukturze:

  1. CREATE TABLE `druzyny` (
  2. `UID` int(11) NOT NULL AUTO_INCREMENT,
  3. `nazwa_druzyny` varchar(30) NOT NULL,
  4. `sklad` text NOT NULL,
  5. UNIQUE KEY `UID` (`UID`)
  6. ) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=1


  1. CREATE TABLE `mecz` (
  2. `UID` int(11) NOT NULL AUTO_INCREMENT,
  3. `id_druzyny1` int(1) NOT NULL,
  4. `id_druzyny2` int(1) NOT NULL,
  5. `wynik1` int(1) DEFAULT NULL,
  6. `wynik2` int(1) DEFAULT NULL,
  7. UNIQUE KEY `UID` (`UID`)
  8. ) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=1 ;



oraz pytanie:
  1. SELECT d0.nazwa_druzyny, d2.nazwa_druzyny, m1.wynik1 FROM mecz m1, druzyny d0, druzyny d2 WHERE (d0.UID=m1.id_druzyny1 AND d2.UID=m1.id_druzyny2)


Chciałbym, by ktoś mi wytłumaczył, dlaczego to pytanie na jednym serwerze działa, a na innym nie? Tabele są takie same na obu serwerach. Jednak na jednym wyświetla się poprawnie, a na drugim nic. Może ktoś wie jak można rozwiązać ten problem (np. inaczej pytanie zadać) by działało również na drugim serwerze?
Założenie jest oczywiste, z tabeli mecz ma wyciągać nazwy drużyn z tabeli drużyny. Może zależeć od różnych wersji SQL czy jak?
darko
no tak, tylko, że w podanych przez Ciebie strukturach tabel nie deklarujesz żadnej relacji pomiędzy kluczami obcymi, natomiast w zapytaniu sql próbujesz odwołać się do relacji, która w podanych przez Ciebie zapisach sql nie istnieje.

szukaj sql (ale silnik innodb, dla myisami trzeba inaczej): CONSTRAINT, FOREIGN KEY, REFERENCES
Radek_1
  1. CREATE TABLE `druzyny` (
  2. `UID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  3. `nazwa_druzyny` VARCHAR( 30 ) NOT NULL ,
  4. `sklad` TEXT NOT NULL ,
  5. ) ENGINE = innodb;

  1. CREATE TABLE `mecz` (
  2. `UID` int(11) NOT NULL AUTO_INCREMENT,
  3. `id_druzyny1` int(1) NOT NULL,
  4. `id_druzyny2` int(1) NOT NULL,
  5. `wynik1` int(1) DEFAULT NULL,
  6. `wynik2` int(1) DEFAULT NULL,
  7. UNIQUE KEY `UID` (`UID`),
  8. FOREIGN KEY (id_druzyny1) REFERENCES druzyny(UID),
  9. FOREIGN KEY (id_druzyny2) REFERENCES druzyny(UID)
  10. ) ENGINE=INNODB


Czy w ten sposób jest ok? Bo mi mimo wszystko nie działa sad.gif Poza tym nurtuje mnie, dlaczego na jednym serwerze działa, a na drugim nie, mimo iż na obu nie zrobiłem relacji?
darko
  1. CREATE TABLE `forum1`.`db` (
  2. `UID` int(11) NOT NULL,
  3. `nazwa_druzyny` varchar(30) NOT NULL,
  4. `sklad` text NOT NULL,
  5. PRIMARY KEY (`UID`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8


  1. CREATE TABLE `forum1`.`mecz` (
  2. `UID` int(11) NOT NULL,
  3. `dbUID` int(11) NOT NULL,
  4. PRIMARY KEY (`UID`),
  5. CONSTRAINT `new_fk_constraint` FOREIGN KEY (`UID`) REFERENCES `db` (`UID`) ON DELETE CASCADE ON UPDATE CASCADE
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8


i dalej już sobie pododawaj resztę pól

ps. polecam mysql query browser to tworzenia tabel
Radek_1
Po co w nazwie forum1?
I do czego kolumna dbUID?

  1. CREATE TABLE `mecz` (
  2. `UID` int(11) NOT NULL,
  3. `id_druzyny1` int(1) NOT NULL,
  4. `id_druzyny2` int(1) NOT NULL,
  5. `wynik1` int(1) DEFAULT NULL,
  6. `wynik2` int(1) DEFAULT NULL,
  7. PRIMARY KEY (`UID`),
  8. CONSTRAINT `new_fk_constraint` FOREIGN KEY (`id_druzyny1`) REFERENCES `druzyny` (`UID`) ON DELETE CASCADE ON UPDATE CASCADE,
  9. CONSTRAINT `new_fk_constraint2` FOREIGN KEY (`id_druzyny2`) REFERENCES `druzyny` (`UID`) ON DELETE CASCADE ON UPDATE CASCADE
  10. ) ENGINE=InnoDB DEFAULT CHARSET=utf8


Stworzyłem takim zapytaniem tabele mecz, tabele druzyny stworzyłem podobnie jak podałeś tyle, że bez tego forum1, ale zapytanie w.w. przeze mnie i tak nie działa sad.gif Może w tym wypadku inaczej trzeba sformułować zapytanie jakoś?
Chce powiązać te dwie tabele, by w meczach zamiast id_druzyny1 i id_druzyny2 były wyświetlane nazwy drużyn z tabeli druzyny.
darko
1. podaj całą strukturę bazy
2. podaj błąd jaki Ci wyskakuje

Cytat
I do czego kolumna dbUID?


bo klucz obcy w tabeli mecz nie może nazywać się tak samo jak klucz główny tejże tabeli (dlatego też nazwy kluczy podstawowych powinny być w miarę unikalne w zakresie jednej tabeli)
Radek_1
Nie wiem jak to się stało, ale już zaczęło to działać, mimo iż nic nie zrobiłem smile.gif Wielkie dzięki smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.