Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] otwieranie obrazka
miszcz
post
Post #1





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 27.09.2011

Ostrzeżenie: (0%)
-----


Wygląda to tak: mam plik php, w którym losowany jest obrazek z bazy, jaki powinien być kod by po kliknięciu w dany obrazek, który się pojawi, ten sam obrazek został otworzony na drugiej podstronie (ew. jaki też kod do "odebrania" tego obrazka powinien być na podstronie)?

Obecnie wyświetlanie losowego obrazka mam tak napisane:

  1. $query="SELECT * FROM images ORDER BY RAND() LIMIT 0,2";
  2. $result = @mysql_query($query);
  3.  
  4. while($row = mysql_fetch_object($result)) {
  5. $images[] = (object) $row;
  6. }
  7. mysql_close();
  8.  
  9. <a href = "/index.php"><img src="/include/<?=$images[0]->filename?>" "width="400" /></a>


mi się wydaje, że trzeba to jakoś na zmiennej GET zrobić lub zmodyfikować jeszcze zapytanie do bazy, ale nie wiem jak...
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
alegorn
post
Post #2





Grupa: Zarejestrowani
Postów: 341
Pomógł: 40
Dołączył: 23.06.2009

Ostrzeżenie: (0%)
-----


Cytat
Skoro już narzekasz, że nieoptymalne, to nie polecaj przetwarzania czegoś w PHP i drugiego zapytania...

hmm..

przy tym zapytaniu
Cytat
SELECT * FROM images
WHERE id <= FLOOR( RAND()*(SELECT max(id) FROM images) )+1
LIMIT 1


zawsze bedzie zwracany pierwszy rekord. (tutaj na poczatek wybierasz x rekordow, <nawet cala tabele>, i obcinasz wszystko do pierwszego rekordu)
druga częśc z : limit x,1 zadziała prawidłowo, ale jest nieoptymalne.
(zmuszasz mysql'a do selecta x+1 rekordow, nastepnie do obciecia puli x - co przy większej ilości danych jest bardzo kosztowne << choc tutaj nie pamietam w 100% dokladnie tego, musialbym doczytac)

moim zdaniem ograniczenie do 5 rekordow, jakie ja zastosowalem, jest mniej kosztowne.
to po pierwsze.

edit: jesli nie wierzysz - sprawdz explainem ilosc rekordow

po drugie, nie jest prawdą że jedno wielkie zapytanie wykona sie szybciej niz kilka mniejszych (nawet z koniecznoscia obrobki po stronie php)
przynajmniej, nie na wydajnym serwerze.

dzięki temu, ze rozbijasz zapytanie na kilka wątków, możesz je wykonać na kilku procesorach.
jesli wysyłasz jedno wielkie zapytanie - wykorzystywany jest tylko jeden procesor...
ot, kwestia skalowania aplikacji. na nieobciążonej maszynie, - tak, pojedyncze zapytanie będzie szybsze, ale na stress testach - wyniki calej aplikacji będą diametralnie różne..

j.

Ten post edytował alegorn 22.03.2012, 16:21:12
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 17.10.2025 - 06:10