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%)
-----


Masz rację mortus będę chciał wyświetlić tylko te linki pod tą kategorią do której pasują i mój skrypt nie da mi takiej możliwości ale biorąc pod uwagę moją jeszcze ubogą znajomość języka ciężko mi uzyskać od razu konkretny wynik dlatego też skrypt mój podzieliłem na punkty i staram się je krok po kroku wykonywać. Obecnie udało mi się poprawnie zastosować pętle aby wyświetlić w oczekiwany sposób dane. Post z kodem który mi podałeś jest świetny i będę kilka kroków do przody - więc dzięki wielkie (IMG:style_emoticons/default/biggrin.gif) muszę go tylko przetestować no i zmienić trochę metodę wyświetlania danych bo on wyświetla cały czas dane w dół ale jeśli mi się nie uda będę pisał (IMG:style_emoticons/default/tongue.gif)

Więc tak. Wykorzystując kod z post który mi podałeś udał i mi się wyświetlić rekordy linków pod odpowiednimi kategoriami a to już dobrze ale kod ten wyświetla wyniki pionowo w formie wykazu <ul></ul> Potrzebuje teraz to przerobić na tabelę która będzie wyglądać tak:
Kod
kategoria1  kategoria2  kategoria3  kategoria4  kategoria5
a           a           a           a           a
b           b           b           b           b
c           c           c           c           c
d           d           d           d           d
e           e           e           e           e
f           f           f           f           f

Męczę się, już ledwo na oczy widzę i dalej bez powodzenia :/ (IMG:style_emoticons/default/tongue.gif) da się ten kod przerobić tak aby zrobić z tego powyższą tabelę? Przypominam, że linki wyświetlane pod kategoriami muszą pasować do kategorii. Poniżej zamieszczam kod:
  1. $sql = 'select l.nazwa LNAZWA, l.id LID, k.id KID, k.kategoria KKATEGORIA from kategorie_linkow k '.
  2. 'left join linki l on l.id_kategoria = k.id '.
  3. 'order by k.id asc, l.id asc';
  4.  
  5. $res = mysql_query($sql) or die(mysql_error());
  6.  
  7. $categories = array();
  8. while ($row = mysql_fetch_array($res)){
  9. $kid = $row['KID'];
  10.  
  11. if (!isset($categories[$kid]))
  12. $categories[$kid] = array('name' => $row['KKATEGORIA'], 'linki' => array());
  13.  
  14. if (!empty($row['LNAZWA']))
  15. $categories[$kid]['linki'][] = array('name' => $row['LNAZWA'], 'id'=>$row['LID']);
  16. }
  17.  
  18. echo '<ul>';
  19. foreach ($categories as $idCat => $category){
  20. echo '<li>' . $category['name'] . '<ul>';
  21. foreach ($category['linki'] as $linki){
  22. echo '<li>' . $linki['name'] . '</li>';
  23. }
  24. echo '</ul></li>';
  25. }
  26. echo '</ul>';



Rozwiązałem problem inaczej. Zamiast męczyć się z przerabianiem wykazu <ul></ul> na tabelę dodałem po prosty formatowanie float: left; dzięki czemu zamiast pionowo wykaz wyświetla się poziomo. Problem teraz inny - chcę aby wyświetlały się trzy kategorie (oczywiście pod nimi linki) następnie przejście do następnego wiersza i znów trzy kategorie. Podobny temat już poruszyłem ale oparty był na tabeli tutaj sytuacja inaczej wygląda. Jedyne rozwiązanie które mi przyszło do głowy to nadać wykazowi <ul> szerokość 600xp i każdej z kategorii szerokość 200px dzięki czemu w jednym wierszu może się wyświetlić tylko trzy kategorie po czym przechodzi do nowego wiersza i to działa pod warunkiem, że pod każdą z kategorii jest po tyle samo linków w przeciwnym wypadku robi się coś takiego:
Kod
kat1  kat2  kat3
a     a    a
b     b    b
c     c    kat4
d     d    a
e          b  
           c
kat5
a
b
c

Macie jakiś pomysł jak to naprawić?

Ten post edytował Zagiewa 13.04.2010, 02:29:01
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: 4.10.2025 - 14:42