andszym
2.08.2007, 10:21:02
Otrzymałem informacje od firmy hostingowej że kwerenda:
select * from tabela where id='1' order by RAND()
przeciaza im baze danych.
Czy ktoś móglby mi podpowiedziec jak to zastąpić, żeby nie przeciazalo im baz danych?
Z gory dziekuje za pomoc.
Andrzej
akubiczek
2.08.2007, 18:11:08
Wiesz... nie piszesz nic o tym ile masz danych, jakiego typu, do czego potrzebne ci jest wyciąganie w losowej kolejności... Trudno wróżyć.
Ale jeżeli masz tam mało rekordów, to czym prędzej zmień tą firmę hostingową na jakąś normalną
A czy nie możesz po prostu losować tego co potrzebujesz php'ie i co zapytania wstawić konkretną zmienną ?
Albitos
2.08.2007, 23:02:53
Z tego co wiem, RAND() zostanie wykonane dla każdego rekordu w bazie, a potem szereguje je w kolejności. Tam nie powinno być czasem LIMIT 1?
SongoQ
3.08.2007, 06:44:45
Ja mysle ze to jest tak ze robisz randa zwracasz wszystki rekordy a nastepnie wyciagasz 1. Tak jak pisal @Albitos. Nie dziw sie ze admini maja pretensje takie rzeczy sa niewybaczalne.
andszym
3.08.2007, 22:17:26
LIMIT 1 da mi tylko jeden rekord.
Rekordów jest niewiele - około 50. Może przykład zle napisalem.
Powiedzmy ze mam tabele "DOM". Każdy rekord tej tabeli ma 300 pól (mniej sie nie da). Jednym z pól w tej tabeli jest pole "kondygnacje".
Chce aby na stronie wyświetlały sie wszystkie domy jednokondygnacyjne, ale w losowej kolejności po to żeby każdy dom miał taką samą szanse na obejrzenie przez użytkownika.
Biorę wiec kwerende:
select * from DOM where kondygnacje='1' order by RAND();
Otrzymuje wynik html:
1)DOM CHABROWY
kondygnacje: 1
powierzchnia: 240 m2
dach: jednospadowy
2)DOM KURANT
kondygnacje: 2
powierzchnia: 210 m2
dach: mansardowy
3)...
itp. itd.
Czy takie wywołanie kwerendy przy tak malej liczbie rekordów może przeciążyć bazę danych?
adamx
4.08.2007, 19:00:19
<?php
$offset_result = mysql_query( " SELECT FLOOR(RAND() * COUNT(*)) AS `offset` FROM `produkty` "); $offset = $offset_row->offset;
$dane['res_produkty'] = mysql_query( " SELECT * FROM `produkty` where ".$wh." LIMIT $offset, 6 " ); ?>
praktycznie wogole nie obciaza bazy.. a losuje prawie tak samo ;]
osiris
5.08.2007, 12:56:11
A masz utworzone indeksy dla pol wg ktorych przeszukujesz tabele?
Cytat(andszym @ 3.08.2007, 23:17:26 )

Powiedzmy ze mam tabele "DOM". Każdy rekord tej tabeli ma 300 pól (mniej sie nie da). Jednym z pól w tej tabeli jest pole "kondygnacje".
Wydaje mi sie jednak ze glowna przyczyna Twoich problemow jest duza ilosc pol w tej tabeli.
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.