Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] wyjście po za while
kielich
post
Post #1





Grupa: Zarejestrowani
Postów: 442
Pomógł: 4
Dołączył: 28.12.2008
Skąd: Warszawa

Ostrzeżenie: (20%)
X----


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


--------------------
Życie jest jak SESJA kiedyś wygaśnie ....

Jeśli moja odpowiedź jakoś Cię nakierowała lub pomogła kliknij Pomógł
Go to the top of the page
+Quote Post
_olo_1984
post
Post #2





Grupa: Zarejestrowani
Postów: 289
Pomógł: 77
Dołączył: 5.08.2006

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


  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


--------------------
awake
Go to the top of the page
+Quote Post
kielich
post
Post #3





Grupa: Zarejestrowani
Postów: 442
Pomógł: 4
Dołączył: 28.12.2008
Skąd: Warszawa

Ostrzeżenie: (20%)
X----


No nie działa tak jak bym chciał sad.gif


--------------------
Życie jest jak SESJA kiedyś wygaśnie ....

Jeśli moja odpowiedź jakoś Cię nakierowała lub pomogła kliknij Pomógł
Go to the top of the page
+Quote Post
_olo_1984
post
Post #4





Grupa: Zarejestrowani
Postów: 289
Pomógł: 77
Dołączył: 5.08.2006

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


a jak byś chciał ?


--------------------
awake
Go to the top of the page
+Quote Post
kielich
post
Post #5





Grupa: Zarejestrowani
Postów: 442
Pomógł: 4
Dołączył: 28.12.2008
Skąd: Warszawa

Ostrzeżenie: (20%)
X----


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


--------------------
Życie jest jak SESJA kiedyś wygaśnie ....

Jeśli moja odpowiedź jakoś Cię nakierowała lub pomogła kliknij Pomógł
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #6





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


można, zadziała, dalczego sam nie sprawdzisz?
Go to the top of the page
+Quote Post
kielich
post
Post #7





Grupa: Zarejestrowani
Postów: 442
Pomógł: 4
Dołączył: 28.12.2008
Skąd: Warszawa

Ostrzeżenie: (20%)
X----


Skoro mówie ze nie działa to logiczne ze sprawdzałem ;/....


--------------------
Życie jest jak SESJA kiedyś wygaśnie ....

Jeśli moja odpowiedź jakoś Cię nakierowała lub pomogła kliknij Pomógł
Go to the top of the page
+Quote Post
piotrooo89
post
Post #8


Newsman


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




albo wrzucasz wszystko do tablicy, albo w sesjach/cookisach zapisujesz, ja proponuje tablice - przykład patrz post ~wNogachSpisz.


--------------------
Go to the top of the page
+Quote Post
kielich
post
Post #9





Grupa: Zarejestrowani
Postów: 442
Pomógł: 4
Dołączył: 28.12.2008
Skąd: Warszawa

Ostrzeżenie: (20%)
X----


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


--------------------
Życie jest jak SESJA kiedyś wygaśnie ....

Jeśli moja odpowiedź jakoś Cię nakierowała lub pomogła kliknij Pomógł
Go to the top of the page
+Quote Post
thek
post
Post #10





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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. }



--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
kielich
post
Post #11





Grupa: Zarejestrowani
Postów: 442
Pomógł: 4
Dołączył: 28.12.2008
Skąd: Warszawa

Ostrzeżenie: (20%)
X----


no tak ale ja chce odczytac zminna $aJakas poza while ze wszytskimi wynikami ;/


--------------------
Życie jest jak SESJA kiedyś wygaśnie ....

Jeśli moja odpowiedź jakoś Cię nakierowała lub pomogła kliknij Pomógł
Go to the top of the page
+Quote Post
_olo_1984
post
Post #12





Grupa: Zarejestrowani
Postów: 289
Pomógł: 77
Dołączył: 5.08.2006

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


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.


--------------------
awake
Go to the top of the page
+Quote Post
kielich
post
Post #13





Grupa: Zarejestrowani
Postów: 442
Pomógł: 4
Dołączył: 28.12.2008
Skąd: Warszawa

Ostrzeżenie: (20%)
X----


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


--------------------
Życie jest jak SESJA kiedyś wygaśnie ....

Jeśli moja odpowiedź jakoś Cię nakierowała lub pomogła kliknij Pomógł
Go to the top of the page
+Quote Post
thek
post
Post #14





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.

Ten post edytował thek 24.10.2009, 19:31:47


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
kielich
post
Post #15





Grupa: Zarejestrowani
Postów: 442
Pomógł: 4
Dołączył: 28.12.2008
Skąd: Warszawa

Ostrzeżenie: (20%)
X----


niechce jednej wartosc wyciągnąc chce wsyztsko miec w zminnej wszytsko co zostało wycignięte przez zapytanie


--------------------
Życie jest jak SESJA kiedyś wygaśnie ....

Jeśli moja odpowiedź jakoś Cię nakierowała lub pomogła kliknij Pomógł
Go to the top of the page
+Quote Post
thek
post
Post #16





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.

Ten post edytował thek 24.10.2009, 22:43:09


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
kielich
post
Post #17





Grupa: Zarejestrowani
Postów: 442
Pomógł: 4
Dołączył: 28.12.2008
Skąd: Warszawa

Ostrzeżenie: (20%)
X----


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...


--------------------
Życie jest jak SESJA kiedyś wygaśnie ....

Jeśli moja odpowiedź jakoś Cię nakierowała lub pomogła kliknij Pomógł
Go to the top of the page
+Quote Post
thek
post
Post #18





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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

Ten post edytował thek 25.10.2009, 13:21:58


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
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 Aktualny czas: 20.08.2025 - 05:04