Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Wypełnianie tabeli - problem
Forum PHP.pl > Forum > Przedszkole
krzesik
Witam, mam problem z wypełnianiem tabeli pewnie sprawa trywialna, ale ogarnęła mnie "pomroczność" i już nie mam siły.....
Potrzebuję wygenerować tabelę w której 5 pierwszych nagłówków jest stałych, kolejne są generowane z bazy

imię i nazwisko | numer | adres | telefon | wartość z bazy 1 | wartość z bazy 2 | wartość z bazy 3 | wartość z bazy n |

a teraz powinieniem wypełniać kolejny rekord już z danymi tylko z bazy

Adam Kowalski | 123 | jakaś ulica | 800 700 700 | 222 | 333 | 444 | nnn |

proszę o pomoc
widmo_91
Wszystko zależy jak wyglądają tabele w bazie z których mają pochodzić te dane:
generalnie myślę, że masz podobny problem co autor tego tematu: Temat: mySql podzapytania zamiast join
krzesik
Rozumiem, struktura wygląda następująco:
TABELA 1
id_tab1, imie i nazwisko, numer, adres, telefon
TABELA 2
id_tab2, id_tab1 , nazwa, ilosc

w tabeli 2 rekordów przypisanych do jednego rekordu z tabeli 1 może być min 1 max 15
widmo_91
Masz relacje wiele do wiele więc powinieneś mieć jeszcze dodatkową tabelę, struktura powinna wyglądać jakoś tak:

TABELA 1
id_tab1, imie i nazwisko, numer, adres, telefon
TABELA 2
id_tab2, nazwa
TABELA 3
id_tab1, id_tab2, ilosc

Korzyści z tego płynące:
- zoptymalizowanie (zmniejszenie rozmiaru) bazy danych
- łatwiejsze zapytania szczególnie to z pierwszego posta
- spójność danych, łatwiejsze przetwarzanie danych

Algorytm rozwiazania:
  1. "SELECT t1.imie, t1.nazwisko, ".[b]generujPivot() [/b]."
  2. FROM tabela1 t1 LEFT JOIN tabela3 t3 ON t3.id_tab1 = t1.id_tab1
  3. LEFT JOIN tabela2 t2 ON t2.id_tab2 = t3.tab_2
  4. GROUP BY t1.id_tab1, t1.imie, t1.nazwisko"



  1. pobierz, plaintext
  2. function generujPivot()
  3. {
  4.  
  5. // $tablica = tablica wszystkich wartosci z tabeli t3
  6. // coś w stylu:
  7. $result = $result = mysql_query("SELECT * FROM tabela3");
  8. $tablica = array();
  9. while ($row = mysql_fetch_assoc($result)) {
  10. $tablica[] = $row;
  11. }
  12.  
  13. // $kolumna = klucz obcy z tabeli t3 do t2 w tym przypadku t3.id_tab2
  14. $kolumna = "t3.id_tab2";
  15.  
  16. // $wartosc = wyswietlana wartość w tabeli wynikowej
  17. $wartosc = "t2.nazwa";
  18.  
  19.  
  20. $zapytanie = '';
  21. for ($i = 0; $i < count($tablica); $i++) {
  22. $zapytanie .= "max(case when $kolumna = {$tablica[$i]["id"]}
  23. then $wartosc end) AS `{$tablica[$i]["nazwa"]}`, ";
  24. }
  25. return rtrim($zapytanie, ', ');
  26. }

wink.gif
krzesik
baza jest niestety w takiej strukturze jak podałem, jest w ciągłej pracy więc jakiś inny pomysł na rozwiązanie przy bazie jaką mam?
widmo_91
trzeba lekko zmodyfikować:

  1. "SELECT t1.imie, t1.nazwisko, ".[b]generujPivot() [/b]."
  2. FROM tabela1 t1 LEFT JOIN tabela2 t2 ON t2.id_tab1 = t1.id_tab1
  3. GROUP BY t1.id_tab1, t1.imie, t1.nazwisko"




  1. function generujPivot()
  2. {
  3.  
  4. // $tablica = tablica wszystkich unikalnych wartosci z tabeli t2
  5. // coś w stylu:
  6. $result = $result = mysql_query("SELECT DISTINCT nazwa FROM tabela2");
  7. $tablica = array();
  8. while ($row = mysql_fetch_assoc($result)) {
  9. $tablica[] = $row;
  10. }
  11.  
  12. $kolumna = "t2.nazwa";
  13.  
  14. // $wartosc = wyswietlana wartość w tabeli wynikowej
  15. $wartosc = "t2.nazwa";
  16.  
  17.  
  18. $zapytanie = '';
  19. for ($i = 0; $i < count($tablica); $i++) {
  20. $zapytanie .= "max(case when $kolumna = {$tablica[$i]["nazwa"]}
  21. then $wartosc end) AS `{$tablica[$i]["nazwa"]}`, ";
  22. }
  23. return rtrim($zapytanie, ', ');
  24. }


coś w tym stylu
krzesik
kurczę mam problem aby to w tabelę "ubrać".....
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.