szczalpi
10.06.2022, 18:10:59
Witam Was wszystkich. Poniżej wkleiłem kod mysql. Chcę dodać do zapytania GROUP BY, lecz nie wiem jak to zrobić. Próbuje na różne sposoby, ale nie wychodzi.
Proszę Was o pomoc jak to rozgryźć. Z góry dziękuje.
[/sql]
[sql]$result = mysqli_query($conn,"SELECT FLOOR(RAND() * COUNT(*)) AS offset FROM k_copy WHERE id");
$offset_row = mysqli_fetch_object( $result );
$offset = $offset_row->offset;
$result = mysqli_query($conn,"SELECT * FROM k_copy WHERE id LIMIT $offset, 10 " );
$row = mysqli_fetch_array($result);
nospor
10.06.2022, 18:41:12
To moze pokaz jak probujesz to dodac i jakie bledy dostajesz. W dokumentacji mysql masz jasno napisane przy skladni SELECT gdzie sie wstawia group by wiec ciezko mi sobie wyobrazic z czym konkretnie masz problem
ps: swoja droga co to za warunek?
WHERE id
warunek ma cos okreslac np
WHERE id > 10
WHERE id = 5
itd itd a nie samo id
szczalpi
10.06.2022, 19:01:39
Nospor masz racje. Zmieniłem to i teraz wygląda tak:
$result = mysqli_query($conn,"SELECT FLOOR(RAND() * COUNT(*)) AS offset FROM k_copy GROUP BY miasta");
$offset_row = mysqli_fetch_object( $result );
$offset = $offset_row->offset;
$result = mysqli_query($conn,"SELECT * FROM k_copy LIMIT $offset, 10 " );
$row = mysqli_fetch_array($result)
Niestety dalej nie chce mi grupować miejscowości o tej samej nazwie. :/
nospor
10.06.2022, 19:07:37
Nie kumam co i gdzie chcesz grupowac.
Teraz GROUP BY dales w zapytaniu ktore zlicza liczbe rekordow. Dajac tam GROUP BY, zapytanie zwroci ci wiersze zawieracace liczbe miast o tej samej nazwie. I tyle. I ty z tego zapytania pobierasz tylko jeden wiersz.
Drugie zapytanie, ktore teoretycznie zwraca juz dane z rekordow, tam nie masz GROUP BY i tez pobierasz jeden rekord.
Moze wez sam sie najpierw zastanow co chcesz osiagnac, wywal to pseduo stronicowanie i skup sie na tym co chcesz zrobic i nam napisz. Bo teraz ni w zab nic z tego nie wynika
szczalpi
10.06.2022, 19:21:47
Chodzi mi oto, aby nie uzywac RAND(). Chce, aby z bazy pobieralo losowo rekordy, a jezeli się powtarzaja to aby je grupowalo.
SELECT * FROM k_copy ORDER BY RAND() LIMIT 10
nospor
10.06.2022, 19:25:07
Czyli chcesz losowo wyswietlic 10 roznych miast?
Czyli tak
select * from ( SELECT * FROM k_copy GROUP BY miasta) as podseld ORDER BY RAND() LIMIT 10
szczalpi
10.06.2022, 19:33:00
Jezeli mam w bazie 160k rekordow to ta funkcja nie bedzie obciazala za mocno serwera ? Czytalem, aby RAND nie uzywać,ale moge sie mylic.
nospor
10.06.2022, 19:34:35
No to zamien to moje zapytanie
select * from ( SELECT * FROM k_copy GROUP BY miasta) as podseld ORDER BY RAND() LIMIT 10
na to twoje wczesniejnie gdzie wyliczales offset i juz. Ale zasada do wyswietlenia 10 roznych miast jest wlasnie taka jak podalem
szczalpi
10.06.2022, 20:09:59
tak to ma wygladac
$result = mysqli_query($conn,"SELECT FLOOR(RAND() * COUNT(*)) AS offset FROM k_copy GROUP BY miasta");
$offset_row = mysqli_fetch_object( $result );
$offset = $offset_row->offset;
$result = mysqli_query($conn,"SELECT * FROM k_copy LIMIT $offset, 10 " );
$row = mysqli_fetch_array($result);
kuzwa tepa dzida ze mnie ..... :/
nospor
10.06.2022, 20:17:03
No nie, bo wrociles do punktu co miales pare postow wyzej. Mowielm, przystosuj ten kod do tego co ja ci podalem
szczalpi
10.06.2022, 20:23:57
tak jest prawidlowo

?
$result = mysqli_query($conn,"select * from ( SELECT * FROM k_copy GROUP BY miasta) as offset ORDER BY RAND() LIMIT 10 ");
$offset_row = mysqli_fetch_object( $result );
$offset = $offset_row->offset;
//$result = mysqli_query($conn,"SELECT * FROM k_copy LIMIT $offset, 10 " );
$row = mysqli_fetch_array($offset);
nospor
10.06.2022, 20:26:41
ja sie wlasnie ucze na egzamin a ty skolei wylaczyles myslenie. Ja ci gotowca nie podam.
No teraz uzyles RAND w sortowaniu, a dopiero co marudziles ze to wolne i ma byc inaczej. No to czy to jest dobrze? No logicznie pomysl przez chwile....
O to
FLOOR(RAND() * COUNT(*))
masz wstawic gdzies, a potem majac wynic tego czegos masz pobrac wlasciwe rekordy ale tez pamietajac o strukturze co ci wczesniej podalem
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.