Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pytanie, LIMIT w mysql, policzenie
Forum PHP.pl > Forum > PHP
jacekrzeszow
Witam, mam takie pytanie. Mam sobie tabele, w ktorej np jest 500 rekordow, ja chce pobrac pierwszych 10 rekordow pomiedzy dwiema okreslonymi godzinami/datami
i to nie stanowi problemu. Jednak mam w tej tabeli kolumne "status", i tutaj status=0 lub status=1. Chce pobrac pierwszych 10 rekordow ze wszystkimi statusami, ale zeby policzylo mi tylko ile jest statusow z wartoscia 1. Jesli dam where status=1 order by id asc limit.. to nie dziala jak powinno, bo bierze pod uwage pierwszych 10 rekordow ze statusem 1, a 0 w ogole nie sprawdza. I tutaj pytanie jak to zrobic - czy mozna to jakos w zapytaniu zrobic? case if? i potem uzyc mysql_num_rows? probowalem roznych sposobow lacznie ze zmienna o wartosci zero i jesli status =0 to wtedy $zmienna++; ale zle to bylo liczone. Jednym slowem chce posortowac to rosnaco po id, pomiedzy 2 datami i musi to byc pierwzych 10 rekodorw bez wzgledu na status i chce uzyskac liczbe przypadkow ze status=1 w tych pierwszych 10 rekordach, wydaje sie banalne, ale jakos jeszcze na to nie wpadlem.


Z gory dzieki za porady.
!*!
Pokaż jak próbowałeś. W zapytaniu jest coś takiego jak COUNT, WHERE itd.
jacekrzeszow
  1. $zapytanie2 = "SELECT * FROM community_matches inner join community_bets on community_matches.datetime between '{$pole1['date_start']}' and '{$pole1['date_finish']}' and community_matches.active=0 and community_bets.matchid=community_matches.id and community_bets.users_id={$pole1['home_id']} order by community_bets.id desc limit 10";

  1. $dzialaj2=mysql_query($zapytanie2);
  2. $p=mysql_fetch_array($dzialaj2);
  3.  
  4. $i=0;
  5. if($p['status'] == 1)
  6. {
  7. $i++;
  8. }


To robilem ostatnio, probowalem tez wczesniej z count, jednak nie mam tego juz zapisanego. Cale powyzsze zapytanie wykonuje sie w petli dla wielu przypadkow.

Zrobiłem coś takiego:

  1. $zapytanie20 = "SELECT * FROM community_bets inner join community_matches on community_matches.datetime between '{$pole1['date_start']}' and '{$pole1['date_finish']}' and community_matches.active=0 and community_bets.matchid=community_matches.id and community_bets.users_id='{$pole1['home_id']}' order by community_bets.id asc limit 10";
  2. $dzialaj20=mysql_query($zapytanie20);
  3. while($pole2220 = mysql_fetch_array($dzialaj20))
  4. {
  5. $zapytanie2 = "SELECT * FROM community_bets where id='{$pole2220['id']}'and won='y'";
  6. $dzialaj2=mysql_query($zapytanie2);
  7. $pole22 = mysql_num_rows($dzialaj2);
  8. }


Najpierw pobieram wszystkie rekordy bez wzgledu na status, i potem po id tych rekordow pobieram z warunkiem won='y' i sprawdzam ile jest takich rekordow, jednak pokazuje sie maksymalnie 1 rekord ( $pole22) w kazdym przypadku, a powinno o pare wiecej...
Yorki
Może to Ci się przyda i nakieruje:

  1. SELECT Tabl.Name, Tabl.Address, Results.Totals
  2. FROM Databas.Tabl
  3. LEFT JOIN (SELECT COUNT(*) AS Totals, 0 AS Bonus
  4. FROM Databas.Tabl
  5. WHERE TimeLogged='Noon'
  6. GROUP BY NULL) Results
  7. ON 0 = Results.Bonus
  8. WHERE STATUS='URGENT';
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.