Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL] Losowanie ;)
Forum PHP.pl > Forum > Przedszkole
kusiu
Posiadam w tabeli następujące rekordy:

id | nr | id_u
1 11 4
2 12 4
3 13 4
4 21 5
5 22 5

i chcialbym po przez mysql'a(lub mssql'a) wylosowac po jednym rekordzie dla kazdego id_u.. czyli z 3 rekordow dla id_u=4 wylosowac 1 oraz z 2 rekordów dla id_u=5 tez wylosowac 1, oczywiscie ilosc id_u bedzie dynamiczna...

Proszę o pomoc smile.gif
piotrooo89
  1. SELECT * FROM `tabela` WHERE id_u=1 ORDER BY RAND() LIMIT 1 ;


coś takiego?
kusiu
Cytat(piotrooo89 @ 13.01.2009, 18:37:09 ) *
  1. SELECT * FROM `tabela` WHERE id_u=1 ORDER BY RAND() LIMIT 1 ;


coś takiego?


No ale tu kolego Twój przykład wyświetli jeden rekord dla id_u=1... uzytkownikow bedzie wiecej ... kazdy bedzie mial po kilka rekordow i chodzi o to zeby wygenerowac po jednym rekordzie dla konkretnego uzytkownika...
magra
  1. SELECT * FROM `tabela` GROUP BY `id_u` ORDER BY RAND()
kefirek
Chyba tak będzie
  1. <?php
  2. $wynik = mysql_query("SELECT * FROM test GROUP BY id_u");
  3. while($r = mysql_fetch_assoc($wynik)) {
  4. $wynik1 = mysql_query("SELECT * FROM test WHERE id_u='".$r['id_u']."' ORDER BY RAND() LIMIT 1");  
  5. while($r1 = mysql_fetch_assoc($wynik1)) {
  6. echo $r1['nr'];
  7. }  
  8. }  
  9. ?>
kusiu
Cytat(magra @ 13.01.2009, 18:41:50 ) *
  1. SELECT * FROM `tabela` GROUP BY `id_u` ORDER BY RAND()


nie wiem jak w mysql, ale myslalem ze jak przerobie to troche i przeniose do mssql to bedzie smigac jednak nie... wywala blad..
poki co mam cos takiego:

  1. SELECT id_u FROM tabela GROUP BY id_u
  2. ORDER BY NEWID()


jak to rozwinac aby pokazywala się druga kolumna z wylosowanym nr??
magra
W temacie masz mysql, a teraz piszesz, że ci nie działa w mssql?! Zdecyduj się o co chcesz zapytać...
zegarek84
Cytat(kusiu @ 14.01.2009, 09:37:16 ) *
nie wiem jak w mysql, ale myslalem ze jak przerobie to troche i przeniose do mssql to bedzie smigac jednak nie... wywala blad..

jako tako w zapytaniach SQL ogólnie nie ma funkcji rand() (jest ale w mysql) - na zaś zaznaczaj dokładniej o która bazę chodzi - mimo, iż na większość baz można przenosić zapytania SQL to są jednak drobne niuanse między nimi...

Cytat(kusiu @ 14.01.2009, 09:37:16 ) *
poki co mam cos takiego:
  1. SELECT id_u FROM tabela GROUP BY id_u
  2. ORDER BY NEWID()

jak to rozwinac aby pokazywala się druga kolumna z wylosowanym nr??
poprostu dopisz ta kolumnę w SELECT
  1. SELECT id_u,nr FROM tabela GROUP BY id_u
  2. ORDER BY NEWID()
kusiu
Cytat(magra @ 14.01.2009, 09:45:31 ) *
W temacie masz mysql, a teraz piszesz, że ci nie działa w mssql?! Zdecyduj się o co chcesz zapytać...


napisalem MySQL bo wiecej osob potrafi go od MsSQL'a a myslalem ze nie bedzie problemu tego zapytania wdrozyc do MsSQLa winksmiley.jpg

Cytat(zegarek84 @ 14.01.2009, 09:50:11 ) *
jako tako w zapytaniach SQL ogólnie nie ma funkcji rand() (jest ale w mysql) - na zaś zaznaczaj dokładniej o która bazę chodzi - mimo, iż na większość baz można przenosić zapytania SQL to są jednak drobne niuanse między nimi...

poprostu dopisz ta kolumnę w SELECT
  1. SELECT id_u,nr FROM tabela GROUP BY id_u
  2. ORDER BY NEWID()


Probowalem...Niestety wywala mi blad...
Column '#tmp.nr' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
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.