Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Bazy danych _ Jak dodac GROUP BY do niżej podanego zapytania

Napisany przez: 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.

  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);

Napisany przez: 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

Napisany przez: szczalpi 10.06.2022, 19:01:39

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. :/

Napisany przez: 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

Napisany przez: 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.

  1. SELECT * FROM k_copy ORDER BY RAND() LIMIT 10

Napisany przez: 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

Napisany przez: 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.

Napisany przez: 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

Napisany przez: szczalpi 10.06.2022, 20:09:59

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 ..... :/

Napisany przez: 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

Napisany przez: szczalpi 10.06.2022, 20:23:57

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);

Napisany przez: 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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)