Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobieranie losowo unikatowych rekordów
Forum PHP.pl > Forum > Bazy danych > MySQL
Mooseman
Mam następującą tabele i oraz przykładową zawartość:

|id |name |category |
--------------------------
|1 |Jabłko |1 |
|2 |Banan |1 |
|3 |Cytryna |2 |
|4 |Pomidor |3 |
|5 |Anans |3 |
--------------------------

W jaki sposób mogę pobrać losowo po jednym produkcie z każdej kategorii? Wynikiem zapytania kótre mnie interesuje winny byc w tym przypadku trzy rekordy, z czego pierwszy to Jabłko lub Banan + Cytryna + Pomidor lub Ananas. Mayśle, że rozumiecie co chcę uzyskać.

Próbowałem zapytania z użyciem ...GROUP BY `category` ORDER BY RAND()... ale daje to efekt w postaci pobierania zawsze tego samego rekordu z danej kategori i całość w losowej kolejności. Nie jest to jednak to czego oczekuję. Próbowałem także ...SELECT DISTINCT `category`... ale tutaj wynikiem są same wartości z kolumny `category`, a ja nie potrafię pobrać do tego jeszcze to co najważniejsze czyli ich `id` oraz `name`
.

Będę niezmiernie wdzieczny za każdą sugestię.
melkorm
jeżeli chodzi o DISTINCT to wystarczy że po przecinku dodasz pola które chcesz pobrać czyli coś w stylu:

  1. SELECT DISTINCT(pole) , id FROM ....


ale distinct działa na cały wynik, a nie na poszczególne pola, więc i tak nie zadziała do przykładu który chcesz, group by zawsze bierze pierwszy lub ostatni, ale zawsze ten sam, a RAND działa na wynikach zapytania winksmiley.jpg
kimj9174
A utworz 2 tablice.
Jedna z produktami z kategorii 1, druga z kategorii 2

pozniej przetasuj jedna i druga, pobierz po pierwszym elemencie z tablicy i polacz je array_merge.

2.gi sposob
1 zapytanie select costam form gdziestam where costam=costam
- masz rekord
2 drugie zaytanie select * from costam where costam rozne od 'masz rekord' ORDER BY RAND() LIMIT 1

i po zawodach


edit nie spojrzalem. musisz zrobic tyle zapytan ile masz kategorii (chyba)
mousisz powtorzyc tyle razy ile masz kategorii
melkorm
a takie coś :

  1. SELECT *
  2. FROM ( SELECT *
  3. FROM `tabela` ORDER BY RAND()) a
  4. GROUP BY a.category;


snitch.gif
Mooseman
@melkorm - to jest właśnie to zapytanie - bardzo dziękuję.
melkorm
Nie ma za co, samego mnie nurtowało to zagadnienie i dziś w pracy dostałem olśnienia winksmiley.jpg
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.