lukash82
7.10.2015, 11:14:28
Witam,
Mam dziwny problem z zliczeniem ilości rekordów w bazie. Robię to tak:
$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());
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
7.10.2015, 11:18:59
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
7.10.2015, 11:27:07
Mam to połączone w tym miejscu:
A.strona=B.id
nospor
7.10.2015, 11:35:41
dziwne nazewnictwo... czyli mowisz w kolumnie strona znajduje się ID z tabeli B?
lukash82
7.10.2015, 11:45:09
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
7.10.2015, 11:50:36
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
7.10.2015, 12:17:43
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
7.10.2015, 12:22:36
Cytat
Jak zrobić ten zrzut, o którym piszesz?
No prosze cie....
ctrl+c, ctrl+v
albo printscreen i wklej tu obrazek
Pyton_000
7.10.2015, 12:25:25
var_dump("SELECT lp FROM posty A, lang_0 B WHERE A.strona='X' AND A.strona=B.id AND B.view='on'")
nospor
7.10.2015, 12:33:11
@Pyton mi chodzilo o zrzut wyniku zapytania a nie doslownie zrzut zapytania
Pyton_000
7.10.2015, 12:45:46
lukash82
7.10.2015, 12:45:56
Zrobiłem tak:
var_dump("SELECT lp FROM posty A, lang_0 B WHERE A.strona='".$row0['id']."' AND A.strona=B.id AND B.view='on'");
$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());
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
7.10.2015, 12:46:56
Ile jeszcze razy mam napisac:
poprosze o liste rekordow, ktore zwracane są przez zapytanie, ktore podalem
lukash82
7.10.2015, 12:56:21
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
7.10.2015, 12:59:13
do paginacji masz wykonać count tego samego zapytania co do pobierania wyników tyle że bez limitów
lukash82
7.10.2015, 13:12:33
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
7.10.2015, 13:15:33
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.