Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Pobieranie nazw kolumn o nieznanej ilości
iqique
post
Post #1





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 2.03.2011

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


Witam
Mam taki oto kod pobierający z tabeli nazwy kolumn i wypisujący je na ekranie. Mam następującą prośbę. Kod działa, ale chciałbym żeby mi ktoś wytłumaczył po kolei co się tu dzieje bo chcę to zrozumieć. Drugie pytanie w jaki sposób można skonstruować pętlę foreach tak aby do pobranych w podany niżej sposób nazw kolumn wyświetlić odpowiednie zawartości komórek przypisanych do konkretnego id? Chodzi o to, że ilość kolumn nie będzie stała. Będą dochodzić kolejne. Chcę aby po wykonaniu kodu wyświetliły się nazwy kolumn z tabeli i przypisane im wartości dla konkretnego id.

  1. $resResult = mysql_query( "SELECT * FROM magazyn" );
  2. $arrRow = mysql_fetch_array( $resResult, MYSQL_ASSOC );
  3.  
  4.  
  5. foreach( $arrRow as $strKey => $strValue )
  6. {
  7.  
  8. echo $strKey;
  9.  
  10. }
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
pmir13
post
Post #2





Grupa: Zarejestrowani
Postów: 282
Pomógł: 89
Dołączył: 12.04.2011

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



1. Zawartość CAŁEJ tabeli magazyn zapisujesz w zmiennej typu resource $resResult, tam w środku są nie tylko nazwy kolumn, ale też wszystkie rekordy.
2. Pobierasz wiersz z $resResult i tworzysz z niego tablicę $arrRow, w której kolejnym elementom odpowiadają pary nazwa kolumny -> zawartość.
W tabeli tej do zawartości mógłbyś dostać się przez numery kolumn (MYSQL_NUM), nazwy kolumn (MYSQL_ASSOC) lub też na oba sposoby (MYSQL_BOTH, domyślnie). Kolejne wykonania mysql_fetch_array pobrałyby następne rekordy, dopóki coś tam jeszcze w $resResult jest.

5. Dla każdego elementu tablicy $arrRow, przypisując do zmiennych $strKey i $strValue odpowiednio nazwę kolumny i wartość wykonujesz kod między nawiasami, czyli wypisz $strKey.

Ta pętla nie jest konieczna, w zasadzie skoro projektujesz sobie bazę danych to wiesz jakie tam są kolumny i bardziej interesująca jest zawartość.
Pętlą powinno się objąć natomiast wykonywanie mysql_fetch_array, by dostać się do wszystkich rekordów.
Go to the top of the page
+Quote Post
sadistic_son
post
Post #3





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


Zmiennej $resResult przypisz wartość z funkcji mysql_query, czyli z zapytania. Następnie zmiennej $arrRow przypisz tablicę asocjacyjną powstałą po wykonaniu funkcji mysql_fetch_array z wyników zwróconych z mysql_query, czyli z $resResult. Tablica asocjacyjna to taka której klucze (indeksy) są stringami, w tym wypadku to nazwy kolumn z tabeli. Potem pętla forach - dla każdej wartości tablicy $arrRow (czyli dla każdego rekordu który zwróciło zapytanie) wyświetl jego klucz - $strKey, czyli nazwę kolumny z tabeli potraktowanej zapytaniem. W pętli dodaj echo $strValue; a wyświetli Ci poszczególne wartości wartości.
Go to the top of the page
+Quote Post
iqique
post
Post #4





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 2.03.2011

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


Dziękuję za wyjaśnienie już wszystko rozumiem.Stwierdziłem jednak, że dla mojego przypadku pobieranie całej tablicy jest idiotyzmem więc do poniższej linijki dodałem klauzure where bo i tak potrzebuję konkretny wpis.
  1. $resResult = mysql_query( "SELECT * FROM magazyn where id = 1" );


Dodatkowo mam pytanie. Czy podczas wypisywania nazw kolumn z tabeli w pętli mogę jakoś zaznaczyć rozpoczęcie wypisywania od drugiej kolumny? Pierwszym wpisem jest id i nie chciałbym aby był brany pod uwagę.
Go to the top of the page
+Quote Post
matino
post
Post #5





Grupa: Zarejestrowani
Postów: 175
Pomógł: 30
Dołączył: 9.08.2007

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


Jest kilka sposobów. Najprostszy to dać
  1. if($strKey != 'id')
  2. echo $strKey;


Ten post edytował matino 19.04.2011, 10:27:28
Go to the top of the page
+Quote Post

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: 24.08.2025 - 11:14