Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySql] Unikalne zapytanie
Forum PHP.pl > Forum > PHP
jerry89
Witam,
posiadam w tabeli 3 kolumny, primary KEY czyli id, jakas nazwe i inną wartosc (powtarzającą się) powiedzmy id2.
Chcę wyciągnąć losowo 3 rekordy, każdy o róznym id2. Jak tego dokonac?
Bawilem się z DISTINCT ale to funkcja ta pobiera wszystkie niepowtarzające się mozliwosci. Mozna by pobrac jedynie tak:
SELECT DISTINCT id2 FROM blabla ORDER by rand() LIMIT 3;
Ale wtedy nie bede mial pola nazwa które jest mi niezbedne.
Raczej w Mysql nie ma funkcji UNIQUE tak jak np w Oracle. Może to rozwiązac jakims podpzapytaniem? ma ktos pomysł?
maly_swd
  1. SELECT DISTINCT id2, nazwa, id FROM blabla ORDER BY rand() LIMIT 3;
Czy ja dobrze zrozumialem? - to powinno zadzialac;)
jerry89
Własnie o tym pisałem ze to nie zadziała bo tutaj slowo DISTINCT wybiera nam wszystkie mozliwosci niepowtarzających się rekordów. Jednak ja chcę aby tlyko id2 było niepowtarzające się. To zapytanie, które podałes wyswietli nam tak naprawde wszystkie rekordy(przy załozeniu id jest keyem).
cojack
DISTINCT ON (nazwa_kolumny)



@edit
mysql sux
maly_swd
Wiesz , u mnie to dziala. Wyswietla unikalne (id2) 3 losowe rekordy. Sprawdz i podaj jaki wynik Ci zwraca i opisz czemu on nie spelnia Twojego kryterium

SELECT DISTINCT id2, nazwa, id FROM blabla ORDER BY rand() LIMIT 3;

mozesz tez i tak

SELECT id2, nazwa, id FROM blabla GROUP BY ID2 ORDER BY rand() LIMIT 3;
jerry89
Cytat(cojack @ 19.11.2009, 21:48:34 ) *
DISTINCT ON (nazwa_kolumny)



Mam bląd przy takim wyrazeniu. Czy takie cos istnieje w Mysql? A nie przypadkiem tylko w PostgreSQL?

Cytat(maly_swd @ 19.11.2009, 22:24:13 ) *
Wiesz , u mnie to dziala. Wyswietla unikalne (id2) 3 losowe rekordy. Sprawdz i podaj jaki wynik Ci zwraca i opisz czemu on nie spelnia Twojego kryterium

SELECT DISTINCT id2, nazwa, id FROM blabla ORDER BY rand() LIMIT 3;

Dodaj sobie do tabeli 15 rekordów w których po 5 rekordów mają te same id2. Kilka razy wykonaj to zapytanie. ID2 sie powtórzy.

Cytat(maly_swd @ 19.11.2009, 22:24:13 ) *
mozesz tez i tak

SELECT id2, nazwa, id FROM blabla GROUP BY ID2 ORDER BY rand() LIMIT 3;

To juz działa nieźle. Podaje 3 rekordy o róznym id2 jednak za kazdym razem wyswietla te same 3 rekordy, a losuje tylko ich kolejnosc...
maly_swd
Obydwa zapytania robia to samo.
Podaj strukture bazy/tabeli i przykladowe dane. U mnie dzialaja obydwa tak samo i wyswietlaja unikalne rekordy ID2
jerry89
Wrzucam przykład bazy:
http://pastie.org/707526

Oraz mój screen:


Jak widac siteid czyli id2 (tak wczesniej to nazywalismy) sie powtarza.
maly_swd
hmm faktycznie z tym distinct, nie wiem co ja wczoraj sprawdzalem;)
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.