Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] zliczenie ilości rekordów
Forum PHP.pl > Forum > Przedszkole
lukash82
Witam,

Mam dziwny problem z zliczeniem ilości rekordów w bazie. Robię to tak:

  1. $result1 = mysql_query("SELECT lp FROM posty A, lang_0 B WHERE A.strona='X' AND A.strona=B.id AND B.view='on'") or die(mysql_error());
  2. $row1 = mysql_num_rows($result1);


gdzie X to wartość zmienna ale na tym etapie prawidłowa.

Problem polega na tym, że zlicza mi wszystkie rekordy, nawet te, które mają view=''.

W bazie mam 30 rekordów, z czego 4 mają w kolumnie view pusto. Czyli teoretycznie powinno wyliczyć 26 rekordów.

Jeśli zapytanie zmieniam tak, żeby pokazał mi tylko te rekordy gdzie view ='' to pokazuje ilość = 0.

Na chłopski rozum zapytanie wygląda ok, chyba, że czegoś tu nie widzę. Proszę o pomoc bo nie wiem o co kaman:/ Pozdrawiam, Ł.
nospor
Gdy do zapytania dodajesz 2 tabele, to musisz w warunkach połączyć te dwie tabele ze sobą. Jesli tego nie zrobisz, dostajesz iloczyn kartezjanski, czyli każdy z kazdym, i w wyniku dostajesz glupoty
lukash82
Mam to połączone w tym miejscu:

A.strona=B.id

nospor
dziwne nazewnictwo... czyli mowisz w kolumnie strona znajduje się ID z tabeli B?
lukash82
Każdy ma swoje dziwactwa, hehe. Tak jakoś wyszło na początku i już zostało...

Jest tak jak piszesz, czyli w kolumnie strona jest id z tabeli B.
nospor
No to o ile nie mam jakiegoś zacmienia dzisiaj, to zapytanie jest ok.

Pewnie jest blad w danych i źle spojrzales. Mozesz dać zrzut takiego zapytania:
"SELECT A.strona, B.id, B.view FROM posty A, lang_0 B WHERE A.strona='X' AND A.strona=B.id
?
lukash82
Jak zrobić ten zrzut, o którym piszesz? Próbowałem robić (...) INTO OUTFILE 'zrzut.txt' ale wywala mi Access denied for user '...' (using password: YES)

W każdym bądź razie, pokazuje mi 30 rekordów, czyli wszystkie bez rozróżnienia czy view jest 'on' czy ''.

Zapytanie proste jak konstrukcja cepa, a problemów z nim cała masa...
nospor
Cytat
Jak zrobić ten zrzut, o którym piszesz?
No prosze cie....
ctrl+c, ctrl+v
albo printscreen i wklej tu obrazek
Pyton_000
var_dump("SELECT lp FROM posty A, lang_0 B WHERE A.strona='X' AND A.strona=B.id AND B.view='on'")
nospor
@Pyton mi chodzilo o zrzut wyniku zapytania a nie doslownie zrzut zapytania wink.gif
Pyton_000
biggrin.gif
lukash82
Zrobiłem tak:

  1. var_dump("SELECT lp FROM posty A, lang_0 B WHERE A.strona='".$row0['id']."' AND A.strona=B.id AND B.view='on'");
  2.  
  3. $result1 = mysql_query("SELECT * FROM posty A, lang_0 B WHERE A.strona='".$row0['id']."' AND B.view='on' AND A.strona=B.id") or die(mysql_error());
  4. $row1 = mysql_num_rows($result1);
  5. echo "<br>ile: ".$row1;


A wynik na ekranie jest taki:
string(87) "SELECT lp FROM posty A, lang_0 B WHERE A.strona='204' AND A.strona=B.id AND B.view='on'"
ile: 30
nospor
Ile jeszcze razy mam napisac:

poprosze o liste rekordow, ktore zwracane są przez zapytanie, ktore podalem

facepalmxd.gif
lukash82
Może inaczej, wygląda to tak: /delete/

Postów jest 30, z czego 5 jest ukrytych.

Na każdej podstronie są 3 posty, co daje 25/3 = 8 podstron i na 9 powinien być 1 wpis. I tak jest.

Natomiast paginator jest do 10, czyli tak jakby 30/3=10. Paginacja działa ok, ale dostaje na starcie błędną ilość wszystkich postów bo zliczanie nie uwzględnia postów ukrytych.
Pyton_000
do paginacji masz wykonać count tego samego zapytania co do pobierania wyników tyle że bez limitów
lukash82
W tym przypadku zamiast A.strona=B.id powinno być A.id_all=B.id...

Połączyłem tabele nie z tą kolumną co miałem i kompletnie tego nie zauważyłem bo szukałem problemu w zupełnie innym miejscu...

3h wycięte z życiorysu... Ale dzięki wielkie za pomoc. Pewnie siedziałbym nad tym dalej.

Pozdrawiam, Ł.
nospor
Cytat
Połączyłem tabele nie z tą kolumną co miałem i kompletnie tego nie zauważyłem bo szukałem problemu w zupełnie innym miejscu...
Byloby to widac juz dawno, gdyby zrobil to o co prosilem.
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.