iqique
18.04.2011, 21:42:02
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.
foreach( $arrRow as $strKey => $strValue )
{
}
pmir13
18.04.2011, 23:12:31
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.
sadistic_son
18.04.2011, 23:15:11
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.
iqique
19.04.2011, 10:12:29
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.
$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ę.
matino
19.04.2011, 10:27:09
Jest kilka sposobów. Najprostszy to dać
if($strKey != 'id')