MySQL. Losowanie z większej ilości rekordów niż w tabeli

0

Mam pytanie jak losować ilość rekordów większą niż jest w tabeli.
Sytuacja tabela zawiera 10 rekordów potrzebuję wylosować 100 z tych 10.

Stosując
select * from table order by RAND() limit 100
otrzymuję 10 pozycji tyle ile jest rekordów w tabeli.
Jak losować 100 z tych 10?

0

zastosuj "UNION"

0

Nie za bardzo rozumiem.
Union łączy tabele a ja nic nie chcę łączyć.

0
select * from table order by RAND() limit 100
 union all
select * from table order by RAND() limit 100
 union all
....
select * from table order by RAND() limit 100
0

Tylko to mam stosować np. 10 razy?
Zmienna podawana za limit będzie się zmieniać.

0

to musisz dynamicznie budować zapytanie

0

Nie mam pojęcia jak to zrobić można prosić o jakiś przykład

0

@grzegorz_so pisze o dynamicznym budowaniu zapytania w backendzie, na przykład w PHP:

$query = '';

for ($i = 0; $i < 10; $i++) {
  if (strlen($query) > 0) {
    $query .= ' UNION ALL ';
  }

  $query .= 'SELECT * FROM TABLE ORDER BY RAND() LIMIT 100';
}

Ew. tak myślę czy nie dałoby się wykorzystać pętli z poziomu samego MySQLa...
Coś w ten deseń: http://stackoverflow.com/questions/11882594/procedure-union-on-tables

0

zapytanie budujesz jako zmienną tekstową np tak

  max_count:=10;
  x:=100;
  query := '';
  for I := 1 to max_count do
  begin
    query := query + 'select * from TABLE ORDER BY RAND() LIMIT '+inttostr(x);
    if I < max_count then
      query := query + ' union all '
  end;
0

Order by rand to jest najgorszy sposób losowania. Zdecydowanie lepiej mieć kolumnę numerującą wiersze po kolei, na której jest indeks i losowac numery w aplikacji a następnie pobrać przez where..
. in

1 użytkowników online, w tym zalogowanych: 0, gości: 1