Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] [sql] czym zastąpić ORDER BY rand()
Forum PHP.pl > Forum > Bazy danych
jagwie
Witam
posiadam zapytanie sql z ORDER BY rand() lecz zapytanie wywołuje sie około 8sekund
czy da się przyspieszyc
  1. SELECT DISTINCT id_miasta , nazwa_miasta , miasto FROM miasta , oferty
  2. WHERE oferty.miasto=miasta.nazwa_miasta ORDER BY rand( ) LIMIT 10
croc
Wylosować unikalnych 10 liczb w PHP z zakresu <0 ; n - 1> i pobrać przez LIMIT LICZBA, 1 - bez ORDER.

Albo jak masz ID bez dziur to możesz zrobić WHERE id IN (implode(', ', $tablica)).
blooregard
Cytat(jagwie @ 6.11.2011, 17:20:45 ) *
Witam
posiadam zapytanie sql z ORDER BY rand() lecz zapytanie wywołuje sie około 8sekund
czy da się przyspieszyc
  1. SELECT DISTINCT id_miasta , nazwa_miasta , miasto FROM miasta , oferty
  2. WHERE oferty.miasto=miasta.nazwa_miasta ORDER BY rand( ) LIMIT 10


Tworzysz relację po polu, które jest typu tekstowego (zapewne).
Pewnie brakuje Ci indeksów na kolumnach 'oferty.miasto' oraz 'miasta.nazwa_miasta'.

Jeśli będziesz miał dużo rekordów, będzie Ci to zapytanie mulić coraz bardziej, wraz z każdym nowo dodanym rekordem.
jagwie
Właśnie brakuje id miast w tabeli oferty .
w tabeli miasta posiadam około 50000 miast
a w tabeli oferty występuje około 600 miast bez id
potrzebuje porównać tabele miasta z tabelą oferty aby dana oferta z konkretnego miasta występowała w tabeli oferty.



Ponownie witam

próbuje w dwóch zapytaniach uzyskać taki sam efekt.

pierwsze zapytanie sql pobiera losowo z tabeli oferty 10 miast(ponieważ w tej tabeli jest tylko około 600 miast) i zapisuje w zmiennej która jest wykorzystana w drugim zapytaniu
  1. $zapytanie = mysql_query("SELECT miasto FROM oferty ORDER BY rand( ) limit 10");
  2. $wynik = mysql_fetch_array($zapytanie);
  3. $m = $wynik['miasto'];
  4.  
  5. $zapytanie = mysql_query("SELECT id_miasta , nazwa_miasta, szerokosc , dlugosc FROM miasta WHERE nazwa_miasta in ('$m')");
  6. while($wynik = mysql_fetch_array($zapytanie))
  7. $id_miasta[] = $wynik;

w takim układzie przekazywane do drugiego zapytania zmienna "$m" przekazuje tylko jedno miasto .
Potrzebuje aby w przekazanej zmiennej przechodził taki układ- 'kraków','zakopane','sopot' itd
A na tyle nie znam się na php
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.