Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Wyświetlanie dwóch wyników z MySQL w pętli WHILE.
Forum PHP.pl > Forum > Przedszkole
Giluś
Część, mam takie pytanie jak zrobić coś takiego, robię zapytanie do mysql, aby wyświetlił wszystkie wyniki do mysql pogrupowane w ASC (od najlepszego do najgorszego) i później wyświetlam to w pętli WHILE i ustawiają mi się wyniki w własnie w pozycji ASC mniej więcej coś takiego:

Kod
Imie, Rok Urodzenia
Marcin, 2011
Kuba, 2010
Jakub, 2009
Karol, 2008
Michał 2007
Adam 2006
Kuba 2005
Antek 1900


A teraz chciałbym dodać różnice między wynikiem późniejszym, a wcześniejszym mniej więcej aby coś takiego to było:

Kod
Imie, Rok Urodzenia, Różnica
Marcin, 2011, 0
Kuba, 2010, 1
Jakub, 2009, 1
Karol, 2008, 1
Michał 2007, 1
Adam 2006, 1
Kuba 2005, 1
Antek 1900, 1


Jak takie coś zrobić aby odjąć wynik np 1 od 2 ?.
Realne to chyba jest, ale jak to zrobić ?
CuteOne
pogrupowane w ASC - chyba posortowane?

  1.  
  2. $array = array();
  3. while($row = mysql_fetch_assoc($select)) {
  4.  
  5. $array[] = $row;
  6. }
  7.  
  8. foreach($array as $k => $v) {
  9.  
  10. $rok[$k] = $array[0]['rok'] - $v['rok'];
  11. }
Giluś
Nie działa ;/.
Dla testów zastosowałem to do samych ID i wpisałem tak
  1.  
  2. $array = array();
  3. while($row = mysql_fetch_assoc($select)) {
  4.  
  5. $array[] = $row;
  6. }
  7.  
  8. foreach($array as $k => $v) {
  9.  
  10. $rok[$k] = $array[0]['id'] - $v['id'];
  11. }




To wyskakuję przy każdym "-2"
A mam takie id: 1, 2 i 3
Tak jak by pierwsze ID odejmowało się od ostatniego bo tylko tak może wyjść "-2" (edit: zrobiłem test i dałem zamiast minusa, dałem plusa i wyszło "4" wiec to moje przypuszczenie jest poprawne ze pierwszy rekord odejmuję się od ostatniego.)

Macie, może jakieś propozycje jak udoskonalić to ?


Edit.:
A jak by tak dać zapytanie mysql
  1. SELECT * FROM x ORDER BY `rok` ASC

I ustawić limit.
Przed tą pętlą while którą mi wyświetla wszystkie wyniki dać np taki kod: $limit = 0 i później w pętli: $limit += 1, ale jak to później ustawić w mysql, próbowałem tak:
  1. SELECT * FROM x ORDER BY `rok` ASC LIMIT ".$limit.",1

ale również nie działało.
pianta_d
Witam

Jeśli dobrze Cię rozumiem, to potrzebujesz pobrać nr rekordu z posortowanej tablicy (chyba, że źle rozumiem smile.gif )
Jeśli jest tak ja myślę, to wystarczy użyć poniższego kodu (odpowiednio przerobionego do Twoich potrzeb)
  1. //Tworzymy przykładową tablice
  2. $tablica = array("Jan","Maria","Józef");
  3. //pobieramy ilość elementów w tablicy
  4. $ile = count($tablica);
  5. //Wyświetlamy dane z tablicy w kolumnie jeden pod drugim
  6. for ($i=0; $i <$ile; $i++)
  7. {
  8. echo $i .' '.$tablica[$i].'<br />';
  9. }
croc
  1. while($row = mysql_fetch_assoc($query)) {
  2. echo $row['imie'].', '.$row['rok'].', '.(isset($previous) ? $row['rok'] - $previous : 0);
  3. $previous = $row['rok'];
  4. }
Giluś
Nie, nie potrzebuje pobrać id z posortowanej mysql.

Jak najprościej to wytłumaczyć:

Na stronie wyświetla mi się takie coś:
Kod
id ,Imie, Rok Urodzenia
1. Marcin, 2011
3. Kuba, 2010
6. Jakub, 2009
2. Karol, 2008
4. Michał 2007
7. Adam 2006
5. Kuba 2005
8. Antek 1900


A ja chce odjąć np Rok Urodzenia Karola od Jakuba np.: 2009 - 2008 i wychodzi 1, wiec takie coś chciałbym aby wyszło na stronie:

Kod
id ,Imie, Rok Urodzenia
1. Marcin, 2011 0 (bo tyle wyjdzie jak bedzie 20011 - 2011)
3. Kuba, 2010 1 (bo tyle wyjdzie jak bedzie 2011 - 2010)
6. Jakub, 2009 1 (bo tyle wyjdzie jak bedzie 2009 - 2010)
2. Karol, 2008 1
4. Michał 2007 1
7. Adam 2006 1
5. Kuba 2005 1
8. Antek 1900


Tak aby to działało np na przykładzie sekund:
1. Marcin, 100, 0 ( bo 100- 100 = 0)
2. Kuba, 54, 45 (bo 100-54 = 46)
3. Karol, 30, 24 (bo 54-30 = 24)
4. Michał, 20, 10 (bo 30-20 = 10)

Rozumiesz ?
pianta_d
No i jeszcze sposób by @nospor

Pozdrawiam


Edit

Poszukaj w manualu


Edit


Przerobiłem poprzedni przykład w ten sposób, wydaje się chodzić dobrze

  1. //Tworzymy przykładowe tablice
  2. $tablica1 = array(1,2,3,4);
  3. $tablica2 = array(100,200,300,400);
  4. //pobieramy ilość elementów w tablicy1
  5. $ile = count($tablica1);
  6. //Wyświetlamy dane z tablicy w kolumnie jeden pod drugim
  7. for ($i=0; $i <$ile; $i++)
  8. {
  9. $zm2 = $tablica2[$i];
  10. echo $tablica1[$i]-$zm2.'<br />';
  11. }
Giluś
Poszukałem, ale tam nie ma raczej mojego problemu, a @croc, też chyba troszkę zle napisałeś bo pokazuję on chyba 1 wynik, czyli podobnie jak napisał to @CuteOne.

Jak ja sobie to myślę (a jestem praktycznie lalik) to trzeba by zrobić zrobić tak:
  1. $wynik = mysql_query("SELECT * FROM xx ORDER BY `rok` ASC ") or die('Błąd zapytania');
  2. $limit = 0;
  3. while($r = mysql_fetch_assoc($wynik)){
  4. $limit += 1;
  5. $wynik2= mysql_query("SELECT * FROM x ORDER BY `rok` ASC LIMIT ".$limit.",1 ") or die('Błąd zapytania');
  6. // Tu ewentualnie jeszcze while:
  7. while($r2 = mysql_fetch_assoc($wynik2)){
  8.  
  9. $obliczenia = $r['rok'] - $r2[rok];
  10.  
  11.  
  12. ID: ".$r['id']." <br />
  13. Imie: ".$r['imie']." <br />
  14. Rok: ".$r['rok']." <br />
  15. Rok2: ".$obliczenia."
  16. ";
  17. }
  18. }


Tak bym to zrobił, ale nie działało mi to.. wyskakiwał mi jakiś błąd z limitem.

Edit.:
No tak, ale i tak muszę zrobić to na 2 tablicę, wiec i tak muszę JAKOŚ pobrać w pierwszej tablicy wszystkie rekordy, a w drugiej o jeden niżej/wyżej.
croc
Napisz DOKŁADNIE przykładowe dane, które chcesz otrzymać. Piszesz jedno, a z przykładu wynika coś innego. I niech to będzie przykład inny niż 1, 1, 1, 1...
Giluś
Mam baze danych MySQL która ma taką zawartość:

Kod
ID|IMIE|CZAS|
1|MARCIN|400|
2|KUBA|370|
3|MICHAL|320|
4|KAROLINA|150|
5|ADRIAN|99|
6|DAWID|200|
7|DOMINIK|300|


Robię zapytanie aby je wyświetlić w kolejności od najlepszego do najgorszego:
  1. SELECT * FROM user ORDER BY `CZAS` ASC


Wyświetla się w takiej kolejności:
IMIE - Czas
MARCIN - 400
KUBA - 370
MICHAŁ - 320
DOMINIK - 300
DAWID - 200
KAROLINA - 150
ADRIAN - 99

A ja chce dodać różnice między czasami, na tym przykładzie tak to miało by wyglądać:

IMIE - Czas - RÓŻNICA
MARCIN - 400 - 0 (400 - 400 = 0)
KUBA - 370 - 30 (400 - 370 = 30)
MICHAŁ - 320 - 50 (370 - 320 = 50)
DOMINIK - 300 - 20 (320 - 300 = 20)
DAWID - 200 - 100 (300 - 200 = 100)
KAROLINA - 150 - 50 (200 - 150 = 50)
ADRIAN - 99 - 51 (150 - 99 = 51)

* w nawiasach jak to zostało policzone
Zrozumiałeś czy coś jeszcze dopowiedzieć ?

croc
No to moje rozwiązanie było dobre, tylko myślałem, że chodzi Ci o różnice w latach. Zamień $row['rok'] na $row['wynik'] w moim rozwiązaniu tam gdzie trzeba i powinno działać.

P.S. Swój ostatni przykład znów źle podałeś, bo czas ma być podobno rosnąco, a nie malejąco. Widzisz ile znaczy staranne zadawanie pytania.
Giluś
Każdy kto napisał posta w temacie otrzymał POMÓGŁ, wiec dziękuje każdemu za pomoc, ale poprawną odpowiedz na moje pytanie odpowiedział @croc - Dziękuje Bardzo.

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