Ta strona używa ciasteczek (cookies), dzięki którym nasz serwis może działać lepiej. Dowiedz się więcej OK, rozumiem

Zapytanie porównujące

Zdecydowałeś się na tworzenie interaktywnych stron przy pomocy PHP? Chcesz w łatwy i szybki sposób zarządzać danymi na swojej stronie? Tutaj znajdziesz pomoc w napotkanych przy tym trudnościach.

Zapytanie porównujące

Post 07.01.2017, 14:54:37

Proszę o pomoc w składni zapytania SQL,

Mam tabele z wynikami użytkowników w której co jakiś czas (data ) ładują wyniki dla poszczególnych użytkowników. Teraz chodzi o to żeby napisać zapytanie, które przeleci się po tabeli i porówna ostatni wynik Usera z jego wynikiem przedostatnim i stwierdzi czy jest Progres czy wynik jest ten sam czy może się obniżył. Jak już taki Select będzie zwracał wyniki to w pętli zbuduje kolejną tabele ze "wzlotami i upadkami" dla danego użytkownika
rrawicz
Posty: 13
Dołączył(a): 02.01.2017

Re: Zapytanie porównujące

Post 07.01.2017, 15:00:35

NIe da się tego zrobić jednym zapytaniem, a nawet jeśli dałoby się wykombinować coś ze składaniem podzapytań, to przy większej liczbie danych byłoby to mało wydajne.

Ja bym dodał do tabeli wyników kolumnę z różnicą pomiędzy danym rekordem a rekordem poprzednim i uzupełniał ją albo już na etapie ładowania nowych danych, albo (jeśli pierwsza opcja za bardzo spowolniłaby proces ładowania) zaraz po zakończeniu ładowania nowych danych.
Avatar użytkownikatoszcze
Bartosz Romanowski

SuperGod
SuperGod

Posty: 8896
Dołączył(a): 14.10.2003
Lokalizacja: Mysłowice

Re: Zapytanie porównujące

Post 07.01.2017, 15:29:11

Tak też chcę zrobić to jest najlepsza opcja aby to robić zaraz po dodaniu nowego wyniku, ale mam już w tabeli kilka tydiecy rekordów gdzie nie było to robione
rrawicz
Posty: 13
Dołączył(a): 02.01.2017

Re: Zapytanie porównujące

Post 07.01.2017, 15:34:21

No chyba że wywalę tabele do Excela i formułami zrobię dodatkową kolumnę porównującą a potem spowrotem to wrzucę to do bazy danych
rrawicz
Posty: 13
Dołączył(a): 02.01.2017

Re: Zapytanie porównujące

Post 07.01.2017, 21:32:10

Napisz sobie skrypt, który jednorazowo zrobi to dla wszystkich użytkowników. Oczywiście pomysł z Excelem też nie jest zły. ;)
Avatar użytkownikatoszcze
Bartosz Romanowski

SuperGod
SuperGod

Posty: 8896
Dołączył(a): 14.10.2003
Lokalizacja: Mysłowice

Re: Zapytanie porównujące

Post 08.01.2017, 05:02:16

Wymyslilem cos takiego jak ponizej, wykorzystuje tabele tymczasowa z jedna kolumna (score) i jednym wierszem (tabela jest czyszczona w kazdym przebiegu petli, ale zamim zostanie wyczyszczona to pobierany jest z niej ostatni wpis jaki zostal dokonany w tej samej petli.

Ale chyba cos namieszalem bo wyniki dzialania tego dziwolaga nie sa zadowalajace, tzn czesciowo rekordy sa porownywane poprawnie a czesciowo nie. Chyba blad lezy w kolejnosci czyszczenia i zapisu tabeli tymczasowej albo wogole to jest zle napisame. Ktos zerknie fachowym okiem?

Kod: Zaznacz cały
      $zapytanie = 'SELECT * FROM wyniki WHERE user_name = "'.$_GET[user_name].'" Order by date DESC';
      $rezultat = mysql_query($zapytanie) or die (mysql_error());
        $ile = mysql_num_rows($rezultat);
                 
   for ($i = 1; $i <= $ile; $i++)  // petla wykonuje sie tyle razy ile znaleziono rekordow dla danego usera
   {     
      $row = mysql_fetch_assoc($rezultat);

     
                  // Pobranie poprzedniego score z tabeli tymczasowej
                   $score_old = 'SELECT score FROM tabela_tmp';
                $rezultat_score_old = mysql_query($score_old) or die (mysql_error());
                $row_score_old = mysql_fetch_assoc($rezultat_score_old);
                $score_old = $row_score_old['score'];
     
    $score = $row['score'];
     
     if ($score > $score_old){$score_opis = $score . " wzrost";};
     
     if ($score == $score_old){$score_opis = $score . " stagnacja";};
     
     if ($score < $score_old){$score_opis = $score . " spadek";};
     
     // Zapisanie score do tabeli tymczasowejpo uprzednim jej wyczyszczeniu
     $clear_table = mysql_query('DELETE FROM tabela_tmp WHERE 1') or die();
     mysql_query($clear_table);
     
     $sql = "INSERT INTO tabela_tmp (score) VALUES ('$score')";
     mysql_query($sql);
     
     echo "score new: ".$row['score']." - score old: ".$score_old; // wyswietlamy wyniki porownania

}  // koniec petli


L.p. data score progres

1 29-12-2016 0 spadek
2 25-12-2016 2810 wzrost
3 22-12-2016 2388 spadek
4 18-12-2016 2643 wzrost ??
5 15-12-2016 2749 wzrost ??
6 11-12-2016 2764 wzrost
7 08-12-2016 2610 spadek
8 04-12-2016 2740 wzrost
9 01-12-2016 0 spadek

na wyniki trzeba patrzec idac od dolu bo na gorze tabeli jest rekord z najnowsza data
i tak np. progres dla wiersza 8, 7, 6, 3, 2, 1 jest poprawny ale juz dla wiersza 5, 4 nie
rrawicz
Posty: 13
Dołączył(a): 02.01.2017

Re: Zapytanie porównujące

Post 08.01.2017, 21:04:24

Nie przyglądałem się całemu kodowi, bo dla mnie błąd jest już w pierwszym zapytaniu: 'Order by date DESC' powoduje, że rekordy są przetwarzane od najnowszego do najstarszego, a powinno być odwrotnie.
Avatar użytkownikatoszcze
Bartosz Romanowski

SuperGod
SuperGod

Posty: 8896
Dołączył(a): 14.10.2003
Lokalizacja: Mysłowice


Powrót do PHP i bazy danych


 


  • Podobne wątki
    Odpowiedzi
    Wyświetlone
    Ostatni post

Kto przegląda forum

Użytkownicy przeglądający ten dział: Google Adsense [Bot] i 16 gości

Hosting, Domeny, SSL

Subskrypcja

Mamy 50458 zarejestrowanych użytkowników.
Najnowszy użytkownik: ewawy


Nasi użytkownicy napisali:

  • 935692 wiadomości
  • w 246593 tematach

Najnowsze wpisy na blogu

Najnowsze artykuły

Najaktywniejsi (ostatnie 30 dni)