Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] wyjście po za while
Forum PHP.pl > Forum > Przedszkole
kielich
Witam, wiem ze to jest ze tak powiem dziecinne pytanie ale pisząc skrypty nigdy sie nadtym nie zastanawiałem:
Czy jest możliwosć wyjscia ze zmianna poza while ale zeby dalej były wszytskie rekordy wyswietlane np.

  1.  
  2. ....
  3. while($cos=mysql_fetch_array($temp))
  4. {
  5. echo $cos['name'];
  6. }

i tak bedzie wszystko ok wypisze mi wszytsko ale chciałbym np. zrobić tak lecze wiem ze to nie zadziała:

  1. ...
  2. while($cos=mysql_fetch_array($temp))
  3. {
  4. $asd=$cos['name'];
  5. }
  6. echo $asd;


Jest jakas mozliwosc questionmark.gif
_olo_1984
  1.  
  2. $aJakas = array();
  3. $i = 0;
  4. while($cos=mysql_fetch_array($temp))
  5. {
  6. echo $cos['name'];
  7. $aJakas[$i]['name']=$cos['name'];
  8. $i++;
  9. }
  10. echo $aJakas[1]['name'];
  11.  

można tak, można inaczej
kielich
No nie działa tak jak bym chciał sad.gif
_olo_1984
a jak byś chciał ?
kielich
tak jak wyzej napisałem a tak sie niedzieje próbowałem już tak wczesniej

Zna ktos jakies rozwiazanie na w.w problem questionmark.gifquestionmark.gif
wNogachSpisz
można, zadziała, dalczego sam nie sprawdzisz?
kielich
Skoro mówie ze nie działa to logiczne ze sprawdzałem ;/....
piotrooo89
albo wrzucasz wszystko do tablicy, albo w sesjach/cookisach zapisujesz, ja proponuje tablice - przykład patrz post ~wNogachSpisz.
kielich
NO to mi tylko jedna wartosc wyciąga ;/ bo jest

  1. echo $aJakas[1]['name'];

moge dac
  1. echo $aJakas[0]['name'];


ale to mija sie z celem ;/ no alebo foreach tak sao chodzi mi aby nie bylo petli zeby mógł to do inserta wrzucic tak na marginesie

a sprawdzałem printem i w tablicy mam wszystko co potrzebuje a nie moge uzyc petli foreach a zapisz w.w tez nie bo niewiem ile danych bedzie wiec juz sam nie wiem jak z tego whila wycignac poza ;/

Jak moge to rozwiazac ;/ stanołem w miejscu na koncu praktycznie i nieiwme jak to wykonac
thek
Ale Wy kombinujecie... Słyszał który o mysql_result?
Podajesz resource wyciągnięty z bazy, index wiersza, index kolumny i wszystko.
Czyli patrząc na przykład, coś takiego:
  1. $cos = mysql_result($temp, 3, 2);

zwróci wynik 4 wiersza i 3 kolumny wyniku, bo numerowanie jest od 0
Nie da się tak, że $asd poza while będzie zawierało jeden wynik spośród wszystkich wierszy. Wróżkę masz czy co? Skąd komp ma wiedzieć, że chodzi Ci o kolumnę jakąś tam z wiersza 10, a nie na przykład 5? Albo wyciągasz całą kolumnę, albo nic. Nawet licznik $i niepotrzebny.
  1. $aJakas = array();
  2. while($cos=mysql_fetch_array($temp))
  3. {
  4. $aJakas[] = $cos['name'];
  5. }

kielich
no tak ale ja chce odczytac zminna $aJakas poza while ze wszytskimi wynikami ;/
_olo_1984
wiesz co, może ty napisz co konkretnie chcesz zrobić, bo być może istnieje inne rozwiązanie problemu. Gdzieś tam piszesz, że chcesz zrobić insert z danych, może bardziej pomocne było by zapytanie insert-select niż wyciąganie danych poza pętlę, ale tylko strzelam.
kielich
sam już nad tym myślałem ale nie wiem czy da się tak wykonac mam takie zapytanie (w sumie to bybylo optymalnieszcze i lepsze rozwiazanie )

  1.  
  2. $query = "INSERT INTO tabela (nazwa, xxx, xxx, xxx, xxx, xxx, xxxx,nazwa_ca,czas)". "VALUES ('$nazwa', '$xxx', '$xxx', '$xxxx', '$xxxx', '$id','$sposob_zamowienia','".I WŁASNIE TU SELECT."', NOW())";
  3.  
  4. $result=mysql_query($query) OR die ('Nie mozna wykonanac.Przepraszamy');


OK to jak moge złożyc to zapytanie questionmark.gif z tym select

Więc jak mogę zrobić to zapytanie na twóch róznych kolumnach tak jak powiedział olo_1984 moje zapytanie jest wyzej xxx dałem bo po co to komu smile.gif

wielkie dzieki z góry za pomoc
thek
Chłopie...Ale pytanie nadal rozbija się o jedno. Czy Ty masz zamiar tam wpisać tylko jedną określoną wartość gdy jakiś tam rekord ma określone dane, czy Ty chcesz ten insert użyć dla wszystkich rekordów w tablicy? Bo chyba logiczne, że poza pętlę while nie wyciągniesz pojedynczego wyniku w sposób: "mam 10 wyników, a komp niech zgaduje jaki mam na myśli". Albo mu to jawnie określisz, czyli przed pętlą while będziesz miał zmienną i której przypiszesz wartość jeśli znajdziesz interesującą Cię wśród wyników na zasadzie:
  1. $cud='';
  2. while( $row = mysql_fetch_array($temp) ) {
  3. if($row['jakaś kolumna interesująca Cię'] == 'to o co mi chodzi')
  4. $cud = $row['jakas_kolumna'];
  5. }
  6. if( !empty($cud) )
  7. $query = 'SELECT bla, bla, bla';

Albo chcesz wyciągać wartość tej kolumny dla wszystkich rekordów i potem robić insert na ich podstawie w stylu:
  1. $query = 'INSERT INTO tabela (kolumna1, kolumna2, kolumna3) VALUES ';
  2. $ile = strlen($query);
  3. while( $row = mysql_fetch_array($temp) ) {
  4. if( !empty( $row['jakaś kolumna interesująca Cię'] ) )
  5. $query .= '(kolumna1, kolumna2, '.$row['jakaś kolumna interesująca Cię'].'),';
  6. }
  7. if(strlen($query) > $ile) {
  8. rtrim($query, ',');
  9. mysql_query($query);
  10. }

Jeśli żadne z tych nie jest tym co chcesz to może najpierw uderz się w głowę, bo może wtedy uda Ci się ustawić klepki na właściwych miejscach i SENSOWNIE powiesz Nam o co Ci właściwie chodzi. Bo na razie przez cały temat nie wiadomo o co Ci chodzi i co chcesz zrobić. Po prostu na pytania odpowiadasz tak mgliście, że nikt nie wie czego właściwie chcesz.
kielich
niechce jednej wartosc wyciągnąc chce wsyztsko miec w zminnej wszytsko co zostało wycignięte przez zapytanie
thek
To masz na to 2 sposoby. Albo w pierwszej pętli while robisz tablicę z niezbędnymi danymi, jak tu już w kilku postach było, i w drugiej wypełniasz tymi danymi, albo robisz to co ja w ostatnim swoim poście, czyli składasz zapytanie już na poziomie tego pierwszego while, co jest moim zdaniem, bardziej optymalne. A czemu? Bo robisz całość w jednej, a nie dwóch pętlach. Przypatrz się postom dokładnie, bo jak dla mnie rozwiązanie w pierwszy sposób już masz podane od niemal początków przez moich kolegów tutaj, czyli:
  1. $coś = array()
  2. while( $row = mysql_fetch_array($temp) ){
  3. $coś[] = $row['kolumna'];
  4. }

Tak się wypełnia tablicę danymi, o których wspominasz. Ty jeszcze możesz jedynie potem usunąć duble używając array_unique() oraz eliminując ewentualny element pusty. Ale gdy Ci podali to rozwiązanie to stwierdziłeś, że "to nie to o co Ci chodzi". A czy w tej tablicy będzie jedna kolumna czy więcej kolumn to nieistotne. Elementem tablicy może być inna tablica. Po prostu nie znasz do końca możliwości języka chyba.
Dla mnie to nieistotne czy w pętli while podam do zapamiętania jedną czy kilka kolumn, to będzie i tak wiersz do którego się będę mogł odnieść jako $coś[0]['kolumna1'], $coś[0]['kolumna2'], jeśli tylko dobrze zapiszę to przy pobieraniu wyników. A zauważ, że Ci już takie rozwiązanie podali. Zwyczajnie zignorowałeś z powodu braku wiedzy rozwiązanie problemu zamiast je sprawdzić.

Nie dziwię się więc, że nikt nie potrafił Ci dogodzić z rozwiązaniem, bo zwyczajnie nawet nie sprawdziłeś, czy to jest to o co Ci chodzi. Jak widzisz, wisi ono już od iluś postów, ale ukręciłeś temu łeb twierdząc, że nim nie jest. Nagle teraz się okazuje, że chyba jednak tak bo przynajmniej z Twojego opisu jak mialo by ono wyglądać tak wynika.

EDIT: A to co zostało wyciągnięte przez zapytanie to JEST jedna wielka macierz wyników, tyle że zamiast do niej się odnosić jak zazwyczaj się uważa czyli: $wynik['wiersz']['kolumna'] używać można składni mysql_result($wynik, $wiersz, $kolumna).

To tylko inna forma zapisu, ale jak widać, przynajmniej niektórzy nie potrafią tego zauważyć. Bo czy forma zapisu jest istotna? Równie dobrze mogłem w pętli przeskakiwać wskaźnikiem ( mysql_data_seek ) i sobie odczytywać co chcę zamiast używać mysql_fetch_*, ale jest to mniej wydajne i manual o tym wspomina.
kielich
NO OK zrobiłem tak
  1. $zapytaniee = mysql_query("SELECT nazwa FROM kategorie");
  2.  
  3. $cos=array();
  4. while($row=mysql_fetch_array($zapytaniee)){
  5.  
  6. $cos[] = $row['nazwa'];
  7.  
  8.  
  9. }
  10. echo $cos;

i co mi z tego jak odnowa musze robic petle tylko foreach a ja próbuje ze zmienna uciec z petli z danymi ;/ yhhh...
thek
A ja Ci po raz XXXXXXXXX piszę, że Ty sam nie wiesz czego chcesz! Chcesz mieć wynikową kolumnę z wszystkimi 'nazwa', ale oczywiście to nie ma być tablica, bo nie chcesz używać while po raz kolejny. To ja się pytam jakim cudem chcesz to zrobić? Ma być tablicą wyników i stringiem jednocześnie czy co? Bo chcesz pobrać z wszystkich wyników z bazy wartość jakiejś określone kolumny, a sama baza zwróci Ci X wyników, czyli będziesz miał zawsze tablicę X pól 'nazwa' lub ewentualnie zrobisz sobie z tego jeden wielki string potem funkcją implode. Ale jakim cudem Ty chcesz mieć tablicę nie będącą jednak tablicą, bo nie chcesz używać pętli? Tak to tylko w Erze. I myśl zanim po raz kolejny napiszesz jeszcze raz tę samą głupotę. Albo robisz tablice z 'nazwa' i potem na niej operujesz, albo robisz coś już na etapie pierwszego while gdy dopiero odczytujesz dane jak ja zrobiłem przykład ze sklepaniem INSERT długiego. A potem dopiero wpieraj innym, że to nie tak.Bo już przerobilismy większość możliwości jak by to mogło wyglądać i szanowny Pan wybrzydza zamiast na przykład rozpisać konkretnie od A do Z jak to ma dokładnie wyglądać, bo dotychczasowe opisy funkcjonalności jaka rzekomo ma być są już po 2 razy opisane jak dla mnie w całym temacie. Może weź napisz łopatologiczny przykład typu co pobierasz z bazy (przykładowe rekordy) jak się to zachowuje w pętli, co masz dostać po wyjściu z pętli i co chcesz otrzymać w wyniku. Bo tak to możemy do śmierci zgadywać bo piszesz jak królewna "co to by chciała, ale się boi" winksmiley.jpg

EDIT: Zwróć uwagę, że w przykładzie swoim masz X kategorii, a wedle tego co piszesz to chcesz mieć chyba wszystkie w jednym stringu. tylko po co? I tak jak mniemam chcesz mieć dostęp do każdej z osobna. Przykładowo masz kategorie: kat1, kat2, kat3. A według tego co piszesz to albo chcesz mieć je jako:
$cos = "kat1, kat2, kat";
albo chcesz wyciągnąć tylko jedną z nich:
$cos = "kat1";
albo przykład którego jeszcze nie przerabialiśmy:
$cos1 = "kat1";
$cos2 = "kat2";
$cos3 = "kat3";
bo nie chcesz, by to zostało taką tablicą:
$cos = array('kat1', 'kat2', 'kat3');
Ja już po prostu nie wiem o co Ci chodzi, bo tak mydlisz temat. Od razu mówię, że ten którego nie przerabialiśmy to głupota, bo nigdy nie wiesz ile zmiennych dynamicznie utworzysz. Od tego są tablice. Nie utworzysz bowiem pod jedną nazwą typu $cos iluś rekordów stringowych
$cos = 'kat1';
$cos = 'kat2';
$cos = 'kat3';
Bo skąd do ciężkiej chol... komputer ma wiedzieć, o który katX Ci chodzi? Zgaduj-zgadula może trafi? Albo wyciągasz tylko jeden albo kilka określonych (używanie if w pętli dla obu tych przypadków), albo wszystkie. Nie ma innej alternatywy. No chyba, że zapytanie zwróci Ci zero rekordów, to wtedy problem sam się rozwiązuje winksmiley.jpg
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.