Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Distinct a losowanie
Forum PHP.pl > Forum > Przedszkole
Snowak
Witam,
mam tabelę z której losuje wartości. Powiedzmy, że mam pola 'url', 'v1' i 'v2'. Nie chcę aby w wylosowanych polach pojawiły się te same urle więc muszę użyc distinct(url). Ale jednocześnie chce pobrać v1 i v2, lecz gdy dopisze je po url, to wtedy beda mi sie pojawialy takie same urle.

Krótko mówiąc - distinct działa tak, że uznaje za powtórzenie rekordy w których wszystkie pobierane pola w rekordach mają taką samą wartość. A ja chcę zastosować distinct tylko do jednego pola ale pobrać też inne pola tego rekordu.
Jak to rozwiązać?
Maciekbjw
Kod
SELECT DISTINCT * FROM pytania ORDER BY RAND()


coś takiego nie rozwiązuje Twojego problemu?
Snowak
To porównuje wszystkie pola jednocześnie więc url mi się powtarza.

Chodzi mi mniej więcej o coś takiego jak tutaj: http://forum.php.pl/index.php?showtopic=78803
Tyle, że autor tematu nie otrzymał prawidłowej odpowiedzi..
nevt
  1. SELECT * FROM `tabela` GROUP BY `url` ORDER BY RAND();
Snowak
Ale wtedy za każdym razem będzie się pojawiać 1szy rekord z tym urlem a nie losowy... już coś takiego próbowałem.
nevt
a skąd niby baza danych ma wiedzieć, który rekord zostawić jeżeli wylosowałeś kilka o takim samym IP a chcesz mieć unikalne IP w wyniku - przecież nigdzie w zapytaniu nie przekazujesz kryterium tego wyboru... dałem ci tylko podpowiedź, że należy kombinować z GROUP BY a nie z DISTINCT.
skoro potrzebujesz gotowca (chociaż tak się niczego nie nauczysz), to masz:
  1. SELECT * FROM (SELECT * FROM `tabela` ORDER BY RAND()) AS `tmp` GROUP BY `url` ;
Snowak
Nie doceniasz problemu smile.gif Jeżeli użyję group by to po prostu powtarzające się rekordy wywali... A co jeżeli losuje pięć rekordów naraz? Otrzymam mniej... i właśnie rozwiązania tego problemu szukam.
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.