Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Losowy rekord z zakresu
Forum PHP.pl > Forum > Bazy danych > MySQL
Threef
Potrzebne mi zapytanie które zwróci losowy rekord z jakiegoś przedziału mam coś takiego
  1. $przedmioty=mysql_num_rows(mysql_query("SELECT `name` FROM `przedmioty` WHERE `cena` BETWEEN ".($cena-1)." AND ".($cena+1).""));
  2. if($przedmioty>0){
  3. $przedmiot=mysql_fetch_row(mysql_query("SELECT `name` FROM `przedmioty` WHERE `cena` BETWEEN ".($cena-1)." AND ".($cena+1).""));
  4. echo $przedmiot[rand(0,$przedmioty-1)];
  5. }


Pierwsze ładnie zlicza wszystkie rzędy których dotyczy zapytanie.
Z nieznanych mi przyczyn gdy $przedmioty>1 wybierany jest tylko pierwszy rekord

Piszę to w dziale MySQL zamiast PHP bo wiem (chyba) że da się to wykonać przy pomocy jakiegoś zapytania
wookieb
Dodajesz
  1. ORDER BY RAND() LIMIT 1

W drugim zapytaniu,
Threef
Dalej zapytanie zwraca tylko 1 rekord
po prostu resztę rekordów o tej samej cenie olewa tongue.gif
w ogóle olewa wszystkie wybiera tylko ten z ceną równą $cena i najmniejszym ID (Pierwszym wystąpieniem w bazie)
wookieb
  1.  
  2. $przedmioty=mysql_num_rows(mysql_query("SELECT `name` FROM `przedmioty` WHERE `cena` BETWEEN ".($cena-1)." AND ".($cena+1).""));
  3. // nie wiem po co
  4. if($przedmioty>0){
  5. // i jeszcze raz to samo zapytanie?
  6. $przedmiot=mysql_fetch_row(mysql_query("SELECT `name` FROM `przedmioty` WHERE `cena` BETWEEN ".($cena-1)." AND ".($cena+1).""));
  7. // jakim cudem?
  8. echo $przedmiot[rand(0,$przedmioty-1)];
  9. }


Dokonując logicznych skrócen twój kod zamyka się w
  1. $przedmiot = mysql_fetch_row(mysql_query("SELECT `name` FROM `przedmioty` WHERE `cena` BETWEEN ".($cena-1)." AND ".($cena+1)." ORDER BY RAND() LIMIT 1"));
Threef
Działa wielkie dzięki
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.