Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL]losowanie
Forum PHP.pl > Forum > Bazy danych > MySQL
right6
mam taki problem.

1. potrzebuje z bazy mysql wyciagnac dwa rekordy ... o losowym id ..., i jak to zrobic jesli id w bazie nie ida po kolei .... rand(), tylko jak questionmark.gif i posegregowac je potem wg pola X

2. potrzebuje dwa rekordy, ale jeden o id $_GET['id'], a o drugim losowym, ale tez jesli dam rand(), to mi moze taka liczbe wylosowac, ze nie bedzie ona odpowiednia do zadnego id w bazie ... i tez to posortowac wg pola X
mike
0. Proszę poprawić temat wątu. Brakuje w nim obowiązkowego na tym forum prefiksu.
1.
  1. SELECT *
  2. FROM tabela
  3. ORDER BY RAND(), pole LIMIT 2;
right6
a no wlasnie ... ale jak chce pola posortowac wg. pola X questionmark.gif

a jak jeden id mam dany a drugi, chce tylko losowy ?
SongoQ
Cos Cie @mike_mech nie zrozumial

  1. SELECT *
  2. FROM (SELECT
  3. *
  4. FROM tabela
  5. ORDER BY RAND() LIMIT 2) t ORDER BY t.x
right6
niezrozumial albo niewidzial tongue.gif

a jesli jeden id jest ustalony questionmark.gif atylko jeden ma byc losowy ?


---added---
Jakby nie wiedział to by nie pisał.
Sądziłem, że chcesz uzyskać coś innego.
~mike_mech
SongoQ
Czyli chesz miec 1 rekord z warunku where a 2 dolosowany.

Mozesz np unionem

  1. SELECT *
  2. FROM tabela
  3. WHERE id = 666
  4. UNION
  5. SELECT *
  6. FROM tabela
  7. WHERE ORDER BY RAND() LIMIT 1


Dodatkowo mozesz wykluczyc w 2 select zeby nie losowal tego samego id co jest wybrany
i dodatkowo tak jak powyzej z sortowaniem zrobic.
right6
Kod
MySQL zwrócił komunikat:  

#1064 - Something is wrong in your syntax obok 'UNION
SELECT *
FROM emot_graf
WHERE ORDER BY RAND() LIMIT 1' w linii 4

i gow**
nospor
Cytat
i gow**
A nie mozna napisac po prostu, zwyczajnie: nie dziala
?

Przenosze z przedszkola.
SongoQ
To wstaw nawiasy do podzapytan, jesli nie dziala to Twoja wersja MySQLa nie obsluguje podzapytan.
right6
i problem dalej jest nieruszony ... zmiana bazy nie wchodzi w gre
SongoQ
Jakia wersje masz bazki?

  1. (
  2. SELECT *
  3. FROM t
  4. WHERE id =1
  5. )
  6. UNION (
  7. SELECT *
  8. FROM t
  9. ORDER BY rand( )
  10. LIMIT 1
  11. )

Dla >= 4.1
right6
MySQL zwrócił komunikat:

#1064 - Something is wrong in your syntax obok '(
SELECT *
FROM emot_graf
WHERE id =1
)
UNION (
SELECT *
' w linii 1


za ch ... iny nie pujdzie tongue.gif
SongoQ
Przy Unionie jest taki problem ze licza pol musi odpowiadac z 2 podzapytan lub wiecej i typy musza sie zgadzac. Jesli masz dalej problem odezwij sie na gg to wtedy bedzie szybciej zlokalizowac problem lub na IRC.
spenalzo
A nie możesz tego samego zrobić w 2 zapytaniach? rolleyes.gif
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.