Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL]Łączenie tabel za pomocą kluczy
Zagiewa
post
Post #1





Grupa: Zarejestrowani
Postów: 84
Pomógł: 0
Dołączył: 12.08.2009

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


Witam. Mam czysto teoretyczne pytanie.
Mam dwie tabele które opisuje poniżej:

Pierwsza tabela składającą się z dwóch kolumn: id i kategoria. Id jest nadawane przez auto_increment natomiast w kolumnie o nazwie kategoria mieszczą się nazwy kategorii i jest ich dokładnie pięć. Tabela ta wygląda tak:

1. pierwszy kategoria
2. druga kategoria
3. trzecia kategoria
4. czwarta kategoria
5. piąta kategoria

Druga tabela zawiera: id, kategoria, nazwa. Id jest nadawane przez auto_increment, kategoria to cyfra która ma nawiązywać do pierwszej tabeli i kolumna nazwa posiada nazwy produktów i przykładowo wygląda tak:

1. 3. nazwa_produktu

Oznacza to, że pierwszy rekord o identyfikatorze nr. 1 to produkt o nazwie: nazwa_produktu i należy do kategorii 3

Problem w tym, że 'id' w pierwszej tabeli jest przez auto_increment dlatego też jak usunę wszystkie rekordy w pierwszej tabeli i utworze je na nowo? wtedy nie będzie żadnej kategorii o identyfikatorze 3 bo wtedy tabela pierwsza będzie wyglądała tak:

6. pierwszy kategoria
7. druga kategoria
8. trzecia kategoria
9. czwarta kategoria
10. piąta kategoria

Pojawia się problem bo nagle wszystkie rekordy z drugiej tabeli stracą kategorie.
I jak to pogodzić? Bo ja widzę tylko jedną opcję. Oprócz kolumny 'id' w pierwszej tabeli która ma auto_increment wstawić jeszcze jedną kolumnę o nazwie np. "numer_kategorii" i na sztywno wpisywać oprócz nazwy kategorii jej numer ale czy to jest dobre rozwiązanie?

Ten post edytował Zagiewa 8.04.2010, 19:47:51
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Zagiewa
post
Post #2





Grupa: Zarejestrowani
Postów: 84
Pomógł: 0
Dołączył: 12.08.2009

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


Dzięki wielkie działa - chyba (IMG:style_emoticons/default/tongue.gif) tzn stworzyłem na nowo dwie tabele z takimi samymi wartościami ale teraz są one innoDB i mają ustawiony klucz obcy (tzn ta druga tabela ma ustawiony klucz obcy), a przynajmniej tak mi się wydaje. Póki co zapisałem do nich rekordy za pomocą formularzy w php. Teraz tylko muszę stworzyć skrypt co je odczyta i tutaj wyjdzie czy klucz obcy jest dobrze nadany. W razie czego będę pisał.

A właśnie przy okazji skorzystałem również z podpowiedzi piotrooo89 i zmieniłem nazwę kolumny 'kategoria' w drugiej tabeli na 'id_kategoria' (IMG:style_emoticons/default/smile.gif)

Odświeżam temat bo jestem w trakcie pisania skryptu który odczytał by rekordy z połączenia moich dwóch tabel. Jak wyglądają tabele już wiecie. Poniżej przedstawiam kod, który dzięki waszej pomocy wyświetla kategorie:
  1. $kategorie = "SELECT kategoria FROM kategorie_linkow ORDER BY id";
  2. $result = mysql_query($kategorie) or
  3. die("<p id=\"text\">Sprawdź rezultat! " . mysql_error() . "</p>");
  4.  
  5. $i = 0;
  6. $ile = 3;
  7.  
  8. while($wyswietl = mysql_fetch_array($result)) {
  9.  
  10. if($i%$ile == 0 && $i != 0) {
  11.  
  12. $lista .=<<<EOD
  13. </tr><tr>
  14. EOD;
  15. }
  16.  
  17. $kategoria = $wyswietl['kategoria'];
  18.  
  19. $lista .=<<<EOD
  20. <td>$kategoria</td>
  21. EOD;
  22.  
  23. $i++;
  24. }
  25.  
  26. $naglowek = "<table id=\"linki\"><tr>";
  27. $stopka = "</tr></table>";
  28.  
  29. $tabela =<<<EOD
  30. $naglowek
  31. $lista
  32. $stopka
  33. EOD;
  34.  
  35. echo $tabela;


Kod ten poprawnie wyświetla kategorie ale z jednej tabeli co nie jest problemem. Teraz potrzebuję odczytać rekordy z linkami z drugiej tabeli tak aby połączyć kolumnę 'id_kategoria' tabeli 2 z kolumną 'id' tabeli 1, a następnie wyświetlić linki z drugiej tabli tak aby każdy z nich znalazł się pod nazwą swojej kategorii ale to później. Na razie potrzebuje utworzyć połączenie które łączy dwie tabele i skleciłem coś takiego:
  1. $linki = "SELECT l.id_kategoria, l.nazwa, l.adres " .
  2. "FROM linki l " .
  3. "Join kategorie_linkow k " .
  4. "WHERE l.id_kategoria = k.id";
  5. $result = mysql_query($linki) or
  6. die("<p id=\"text\">Sprawdź rezultat! " . mysql_error() . "</p>");

Problem w tym, że gdy ten kod wpiszę do powyższego skryptu i uruchomię stronę to znikają nazwy kategorii które wcześniej się wyświetlały. I teraz pytanie źle utworzyłem bazy (klucz obcy który pierwszy raz tworzyłem przez phpmyadmin) czy też próba połączenie tabel powoduje to zniknięcie?

Ten post edytował piotrooo89 10.04.2010, 14:02:41
Powód edycji: [piotrooo89]: poprawiłem bbcode.
Go to the top of the page
+Quote Post

Posty w temacie
- Zagiewa   [MySQL]Łączenie tabel za pomocą kluczy   8.04.2010, 19:44:00
- - luck   Do tego służą klucze obce. Używając ich możesz cał...   8.04.2010, 19:49:17
- - Zagiewa   Tak rozumiem, że są klucze główne i obce i u mnie ...   8.04.2010, 20:38:58
- - piotrooo89   troszkę mylisz pojęcia. polecam poczytanie o klucz...   8.04.2010, 20:46:05
- - Szeszek1992   [SQL] pobierz, plaintext CREATE TABLE kat (...   8.04.2010, 20:47:14
- - luck   Koledzy już Ci trochę napisali, ja dodam jeszcze t...   8.04.2010, 21:04:39
- - Zagiewa   Klucze główne miałem nadane ale dzięki za info jak...   8.04.2010, 21:06:32
|- - piotrooo89   Cytat(Zagiewa @ 8.04.2010, 22:06:32 )...   8.04.2010, 21:15:42
- - Szeszek1992   W phpMyAdminie możesz dodawać tabele zapytaniem SQ...   8.04.2010, 21:28:26
- - Zagiewa   Dzięki wielkie działa - chyba tzn stworzyłem na n...   9.04.2010, 13:05:55
- - piotrooo89   proszę o używanie odpowiedniego bbcode.   9.04.2010, 13:06:57
- - Zagiewa   Zgaduje, że za bardzo namotałem, że nie odpisujeci...   10.04.2010, 00:08:08
- - piotrooo89   nie mam w zwyczaju prosić 2 razy. temat zamykam. o...   10.04.2010, 08:50:59
- - Zagiewa   Udało mi się chociaż nie wiem czy jest to dobry sp...   11.04.2010, 00:37:15
- - mortus   Hmm... Chyba coś robisz źle. Dlaczego? W tabeli li...   11.04.2010, 09:22:27
- - Zagiewa   Masz rację mortus będę chciał wyświetlić tylko te ...   13.04.2010, 02:16:04
- - mortus   Pokaż to co do tej pory zrobiłeś (wszystko), to bę...   13.04.2010, 08:09:57
- - Zagiewa   Tabele w wyglądają tak: [PHP] pobierz, plaintext $...   13.04.2010, 14:02:46


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: 3.10.2025 - 04:50