Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL]Łączenie tabel za pomocą kluczy
Zagiewa
post 8.04.2010, 19:44:00
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
luck
post 8.04.2010, 19:49:17
Post #2





Grupa: Zarejestrowani
Postów: 317
Pomógł: 58
Dołączył: 6.11.2005

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


Do tego służą klucze obce. Używając ich możesz całą odpowiedzialność za zachowanie spójności danych zrzucić na silnik bazy.


--------------------
Go to the top of the page
+Quote Post
Zagiewa
post 8.04.2010, 20:38:58
Post #3





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

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


Tak rozumiem, że są klucze główne i obce i u mnie powinno to wyglądać tak:

tabela pierwsza: kolumna 'id' powinna być kluczem głównym?
tabela druga: kolumna 'id' powinna być kluczem głównym natomiast kolumna druga 'kategoria' powinna być kluczem obcym nawiązującym do tabeli 'id' tabeli pierwszej?

Klucze główne mam nadane ale czy klucz obcy też się nadaje? Jeśli tak to jak mam to zrobić? I najważniejsze pytanie jak nadam klucz obcy to od tej pory w drugiej tabeli w kolumna 'kategoria' będzie się zmieniała w wraz ze zmianą wartości kolumny 'id' w tabeli pierwszej?
Go to the top of the page
+Quote Post
piotrooo89
post 8.04.2010, 20:46:05
Post #4


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




troszkę mylisz pojęcia. polecam poczytanie o kluczach obcych. jest to wymuszenie więzów integralności czyli w przykładzie:

w tabeli 1 mam id i nazwa
teraz tabela 2 id, pod_nazwa, id_nazwa1 i mam klucz obcy założony na id_nazwa1 do pola id w tabeli 1, i teraz chąc usunąć coś w tabeli 1 która ma 'odnośnik' w tabeli 2 nie dam rady bo moja integralność nie będzie OK, bo miałem coś w tabli 1 co używała tabela 2 a już tego nie ma, FK zapobiega takim działaniom.

polecam lekturę o Forgein Key.


--------------------
Go to the top of the page
+Quote Post
Szeszek1992
post 8.04.2010, 20:47:14
Post #5





Grupa: Zarejestrowani
Postów: 117
Pomógł: 29
Dołączył: 20.05.2009

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


  1. CREATE TABLE kat (
  2.  
  3. id SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  4. nazwa text NOT NULL
  5.  
  6. )


  1. CREATE TABLE produkt (
  2.  
  3. id SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  4.  
  5. nazwa text NOT NULL,
  6. kategoria SMALLINT NOT NULL,
  7.  
  8. FOREIGN KEY (kategoria)
  9.  
  10. REFERENCES kat(id) ON UPDATE RESTRICT ON DELETE RESTRICT
  11.  
  12. )
  13.  

Mniej więcej tak... Resztę doczytasz w manualu

Ten post edytował Szeszek1992 8.04.2010, 20:49:00


--------------------
Go to the top of the page
+Quote Post
luck
post 8.04.2010, 21:04:39
Post #6





Grupa: Zarejestrowani
Postów: 317
Pomógł: 58
Dołączył: 6.11.2005

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


Koledzy już Ci trochę napisali, ja dodam jeszcze tylko odnośnie tego fragmentu:
Cytat(Zagiewa @ 8.04.2010, 21:38:58 ) *
I najważniejsze pytanie jak nadam klucz obcy to od tej pory w drugiej tabeli w kolumna 'kategoria' będzie się zmieniała w wraz ze zmianą wartości kolumny 'id' w tabeli pierwszej?

Zastosuj
  1. ON UPDATE CASCADE
a otrzymasz taki efekt, jakiego potrzebujesz. Wiesz już czego szukać, na pewno znajdziesz mnóstwo artykułów na ten temat.



--------------------
Go to the top of the page
+Quote Post
Zagiewa
post 8.04.2010, 21:06:32
Post #7





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

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


Klucze główne miałem nadane ale dzięki za info jak nadawać klucz obcy. Martwi mnie tylko kwestia braku możliwości usuwania rekordów z pierwszej tabeli ale to jest mało istotne bo nie sądzę aby było to konieczne. Prosił bym was o jeszcze jedną podpowiedź. Serwer który mam postawiony na kompie daje mi możliwość tworzenia baz i tabel za pomocą php ale na serwerze u mojego dostawcy hostingu jedyna możliwość tworzenia baz czy tabel jest dostępna tylko z poziomu phpmyadmin niestety :/ i chociaż jest do do przełknięcia to jak tam tworzy się klucz obcy?

Klucz główny (primary) tworzy się zaznaczając opcję: "podstawowy" przy kolumnie w tabeli a jak brzmi nazwa klucza obcego?

PS. dzięki chłopaki i na pewno jeszcze o tym poczytam tym bardziej, że takie znaczniki/funkcje/opcje (jakkolwiek je nazwa) jak: FOREIGN KEY, REFERENCES kat(id) ON UPDATE RESTRICT ON DELETE RESTRICT, ON UPDATE CASCADE są mi kompletnie obce więc warto się dowiedzieć jak działają smile.gif

Ten post edytował Zagiewa 8.04.2010, 21:09:11
Go to the top of the page
+Quote Post
piotrooo89
post 8.04.2010, 21:15:42
Post #8


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




Cytat(Zagiewa @ 8.04.2010, 22:06:32 ) *
Martwi mnie tylko kwestia braku możliwości usuwania rekordów z pierwszej tabeli ale to jest mało istotne bo nie sądzę aby było to konieczne.


ale takie jest założenie baz danych. nic z nich nie ma być kasowane.

Cytat(Zagiewa @ 8.04.2010, 22:06:32 ) *
Prosił bym was o jeszcze jedną podpowiedź. Serwer który mam postawiony na kompie daje mi możliwość tworzenia baz i tabel za pomocą php ale na serwerze u mojego dostawcy hostingu jedyna możliwość tworzenia baz czy tabel jest dostępna tylko z poziomu phpmyadmin niestety :/ i chociaż jest do do przełknięcia to jak tam tworzy się klucz obcy?


musisz używać tabel typu InnoDB.

poczytaj tu: http://dev.mysql.com/doc/refman/5.1/en/inn...onstraints.html


--------------------
Go to the top of the page
+Quote Post
Szeszek1992
post 8.04.2010, 21:28:26
Post #9





Grupa: Zarejestrowani
Postów: 117
Pomógł: 29
Dołączył: 20.05.2009

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


W phpMyAdminie możesz dodawać tabele zapytaniem SQL w zakładce "Zapytanie przez przykład".


--------------------
Go to the top of the page
+Quote Post
Zagiewa
post 9.04.2010, 13:05:55
Post #10





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

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


Dzięki wielkie działa - chyba 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' 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
piotrooo89
post 9.04.2010, 13:06:57
Post #11


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




proszę o używanie odpowiedniego bbcode.


--------------------
Go to the top of the page
+Quote Post
Zagiewa
post 10.04.2010, 00:08:08
Post #12





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

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


Zgaduje, że za bardzo namotałem, że nie odpisujecie dlatego zadam pierwsze i na razie najważniejsze pytanie. Czy to zapytanie łączenia baz jest poprawne?
  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>");

Pierwsza tabela wyglada tak:
Kod
id. kategoria
1. nazwa_kategorii

Druga tabela wygląda tak:
Kod
id. id_kategorii.   nazwa.       adres
1.  1.       przykladowa_nazwa.  przykladowy_adres

I za pomocą tego zapytania chcę odczytać dane z obu tabeli łącząc z tabeli drugiej kolumne 'id_kategoria' z kolumna 'id' tabeli pierwszej. I otrzymać taki wynik:
Kod
nazwa_kategoria
przykladowa_nazwa, przykladowy_adres
Powód edycji: [piotrooo89]: poprawiłem bbcode raz jeszcze.
Go to the top of the page
+Quote Post
piotrooo89
post 10.04.2010, 08:50:59
Post #13


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




nie mam w zwyczaju prosić 2 razy. temat zamykam. otworzę gdy ja lub inny moderator dostaniem informacje jakie poprawne bbcode powinno być użyte.
Powód edycji: [piotrooo89]: otwieram zgodnie z zapewnieniem autora że będzie już używał odpowiednich bbcode.


--------------------
Go to the top of the page
+Quote Post
Zagiewa
post 11.04.2010, 00:37:15
Post #14





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

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


Udało mi się chociaż nie wiem czy jest to dobry sposób na łączenie tabel ale na pewno skuteczny. Co prawda potrzebuję łączyć się z dwiema tabelami z osobna ale ważne, że działa. Całość wygląda tak:

  1. $linki = "SELECT id_kategoria, nazwa, adres FROM linki";
  2. $result = mysql_query($linki) or
  3. die("<p id=\"text\">Sprawdź rezultat! " . mysql_error() . "</p>");
  4.  
  5. function get_kategoria() {
  6.  
  7. global $id_kategoria;
  8. global $category;
  9.  
  10. $kat = "SELECT * FROM kategorie_linkow WHERE id = '$id_kategoria'";
  11. $result2 = mysql_query($kat) or
  12. die("<p id=\"text\">Sprawdź rezultat! " . mysql_error() . "</p>");
  13.  
  14. $row_kategoria = mysql_fetch_array($result2);
  15. extract($row_kategoria);
  16. $category = $kategoria;
  17. }
  18.  
  19. while($wyswietl = mysql_fetch_array($result)) {
  20.  
  21. $id_kategoria = $wyswietl['id_kategoria'];
  22. $nazwa = $wyswietl['nazwa'];
  23. $adres = $wyswietl['adres'];
  24.  
  25. get_kategoria();
  26.  
  27. $lista .=<<<EOD
  28. <tr>
  29. <td>$category</td><td>$nazwa</td><td>$adres</td>
  30. </tr>
  31. EOD;
  32.  
  33. }
  34.  
  35. $naglowek = "<table id=\"linki\"><tr>";
  36. $stopka = "</tr></table>";
  37.  
  38. $tabela =<<<EOD
  39. $naglowek
  40. $lista
  41. $stopka
  42. EOD;
  43.  
  44. echo $tabela;


Oczywiście wyświetla on jedynie przykładowe dane w przykładowy sposób aby tylko sprawdzić czy ten sposób łączenia tabel się uda no i udał się smile.gif jeśli macie ewentualnie jakieś pomysły jak lepiej przerobić ten kod to chętnie się dowiem.
Go to the top of the page
+Quote Post
mortus
post 11.04.2010, 09:22:27
Post #15





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Hmm... Chyba coś robisz źle. Dlaczego? W tabeli linki masz różne odnośniki i każdy odnośnik należy do określonej kategorii. Rozumiem, że chcesz pobrać i wyświetlić wszystkie linki, które należą do danej kategorii. Ty tymczasem pobierasz wszystkie kategorie (zawsze będzie jedna), które odpowiadają kolejnym odnośnikom z tabeli linki. Wniosek - zła kolejność zapytań do bazy danych. Sam sposób jest dobry, choć nie jestem przekonany, czy najwydajniejszy.

Innym rozwiązaniem jest pobranie danych za pomocą jednego zapytania i umieszczenie ich w specjalnie spreparowanej tablicy. Później do wyświetlenia tych danych używamy właśnie tej tablicy, a nie wyników zapytania. Sposób ten opisał nospor.
Go to the top of the page
+Quote Post
Zagiewa
post 13.04.2010, 02:16:04
Post #16





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 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ł 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 :/ 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
mortus
post 13.04.2010, 08:09:57
Post #17





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Pokaż to co do tej pory zrobiłeś (wszystko), to będzie łatwiej coś wydedukować.
Go to the top of the page
+Quote Post
Zagiewa
post 13.04.2010, 14:02:46
Post #18





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

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


Tabele w wyglądają tak:
  1. $sql = "CREATE TABLE IF NOT EXISTS kategorie_linkow (
  2. id int(11) NOT NULL auto_increment,
  3. kategoria varchar(20) NOT NULL default '',
  4. PRIMARY KEY (id))";
  5.  
  6. $sql2 = "CREATE TABLE IF NOT EXISTS linki (
  7. id int(11) NOT NULL auto_increment,
  8. id_kategoria varchar(11) NOT NULL,
  9. nazwa varchar(255) NOT NULL default '',
  10. adres varchar(255) NOT NULL default '',
  11. PRIMARY KEY (id))";

Kod który je szczytuje i wyświetla wygląda tak:
  1. $sql = "SELECT l.nazwa LNAZWA, l.id LID, k.id KID, k.kategoria KKATEGORIA from kategorie_linkow k " .
  2. "LEFT JOIN linki l " .
  3. "ON l.id_kategoria = k.id " .
  4. "ORDER BY k.id ASC, l.id DESC";
  5.  
  6. $result = mysql_query($sql) or
  7. die("Sprawdź rezultat! " . mysql_error());
  8.  
  9. $categories = array();
  10. while ($row = mysql_fetch_array($result)){
  11.  
  12. $kid = $row['KID'];
  13.  
  14. if (!isset($categories[$kid]))
  15. $categories[$kid] = array('name' => $row['KKATEGORIA'], 'linki' => array());
  16.  
  17. if (!empty($row['LNAZWA']))
  18. $categories[$kid]['linki'][] = array('name' => $row['LNAZWA'], 'id'=>$row['LID']);
  19. }
  20.  
  21. echo '<ul id="linki">';
  22. foreach ($categories as $idCat => $category){
  23. echo '<li style="float: left; list-style-type: none; width: 200px;">' . $category['name'] . '<br /><br /><ul style="margin-left: -40px;">';
  24. foreach ($category['linki'] as $linki){
  25. echo '<li style="list-style-type: none;">' . $linki['name'] . '</li>';
  26. }
  27. echo '</ul></li>';
  28. }
  29. echo '</ul>';

Krótkie wyjaśnienie - id="linki" nadaje formatowanie tekstowi jak kolor itp. co jest mało ważne i co najważniejsze ma szerokość 600px. Każdy <li> wyświetlający kategorię ma 200px po to aby w całym wykazie <ul> mieściło się tylko trzy kategorie w wierszu. Drugi wykaz <ul> dla linków który w moim kodzie wygląda tak: <ul style="margin-left: -40px;"> jest też nie bez powodu. Musiałem nadać ujemny margines aby przesunąć wyświetlane linki na równo w pionie z kategoriami.

Co chcę osiągnąć już wiadomo - wyjaśniłem to myślę dość jasno w moim poprzednim poście w razie czego jeśli jest niezrozumiały mogę wyjaśniać w nieskończoność bo zależy mi aby ten kod działał tym bardziej, że nad całością się sporo napracowałem smile.gif
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 4.05.2025 - 08:17