Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak dodac GROUP BY do niżej podanego zapytania
Forum PHP.pl > Forum > Bazy danych
szczalpi
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.
  1. [/sql]
  2.  
  3.  
  4.  
  5. [sql]$result = mysqli_query($conn,"SELECT FLOOR(RAND() * COUNT(*)) AS offset FROM k_copy WHERE id");
  6. $offset_row = mysqli_fetch_object( $result );
  7. $offset = $offset_row->offset;
  8. $result = mysqli_query($conn,"SELECT * FROM k_copy WHERE id LIMIT $offset, 10 " );
  9. $row = mysqli_fetch_array($result);
nospor
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
Nospor masz racje. Zmieniłem to i teraz wygląda tak:
  1. $result = mysqli_query($conn,"SELECT FLOOR(RAND() * COUNT(*)) AS offset FROM k_copy GROUP BY miasta");
  2. $offset_row = mysqli_fetch_object( $result );
  3. $offset = $offset_row->offset;
  4. $result = mysqli_query($conn,"SELECT * FROM k_copy LIMIT $offset, 10 " );
  5. $row = mysqli_fetch_array($result)


Niestety dalej nie chce mi grupować miejscowości o tej samej nazwie. :/
nospor
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

Chodzi mi oto, aby nie uzywac RAND(). Chce, aby z bazy pobieralo losowo rekordy, a jezeli się powtarzaja to aby je grupowalo.
  1. SELECT * FROM k_copy ORDER BY RAND() LIMIT 10
nospor
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
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
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
tak to ma wygladac
  1. $result = mysqli_query($conn,"SELECT FLOOR(RAND() * COUNT(*)) AS offset FROM k_copy GROUP BY miasta");
  2. $offset_row = mysqli_fetch_object( $result );
  3. $offset = $offset_row->offset;
  4. $result = mysqli_query($conn,"SELECT * FROM k_copy LIMIT $offset, 10 " );
  5. $row = mysqli_fetch_array($result);



kuzwa tepa dzida ze mnie ..... :/
nospor
No nie, bo wrociles do punktu co miales pare postow wyzej. Mowielm, przystosuj ten kod do tego co ja ci podalem
szczalpi
tak jest prawidlowo questionmark.gif?
  1. $result = mysqli_query($conn,"select * from ( SELECT * FROM k_copy GROUP BY miasta) as offset ORDER BY RAND() LIMIT 10 ");
  2. $offset_row = mysqli_fetch_object( $result );
  3. $offset = $offset_row->offset;
  4. //$result = mysqli_query($conn,"SELECT * FROM k_copy LIMIT $offset, 10 " );
  5. $row = mysqli_fetch_array($offset);
nospor
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.