Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL] Kilka pytań dotyczących zapyań do bazy
Forum PHP.pl > Forum > Przedszkole
homik363
Witam
Mam kilka pytać dotyczących zapytań do bazy danych

Czy jest możliwość jednym zapytaniem zmienić 3 rekordy czy musimy wykonać 3 zapytania.

Jak wyciągnąć 3 losowe rekordy gdzie np id >7?

Z góry dzięki za pomoc
karolo_k
Co do tych zapytań to musisz robic je oddzielnie, ale mozesz wpisać je do petli.
A co do tych rekordów to nie wiem czy możesz pobrać rekordy o takim warunku (id>7)
Ale może napewno mozesz pobrac wszystkie a potem "przesortować" to co ma być do wyświetlenia a co nie.
yevaud
mozesz zmienic tyle rekordow ile wpadnie do warunku jaki nakladasz na zapytanie, czyli mozesz zmienic bardzo latwo zarowno 1, 2, 10 jak i wszystkie rekordy.
losowe rekordy mozna wyciagnac na wiele sposobow, najlatwiejszy to narzucic warunek
where id > 7
posortowac losowo reszte rekordow, na przyklad w mysql tak:
order by rand()
i wybrac sobie tyle ile potrzebujesz, na przyklad w mysql 5 rekordow
limit 5

czyli select * from tabela where id > 7 order by rand() limit 5;
sortowanie rand jest srednim wyjsciem z punktu widzenia optymalizacji, ale najlatwiejszym do napisania na poczatek
homik363
Cytat(yevaud @ 18.02.2011, 23:14:39 ) *
mozesz zmienic tyle rekordow ile wpadnie do warunku jaki nakladasz na zapytanie, czyli mozesz zmienic bardzo latwo zarowno 1, 2, 10 jak i wszystkie rekordy.
losowe rekordy mozna wyciagnac na wiele sposobow, najlatwiejszy to narzucic warunek
where id > 7
posortowac losowo reszte rekordow, na przyklad w mysql tak:
order by rand()
i wybrac sobie tyle ile potrzebujesz, na przyklad w mysql 5 rekordow
limit 5

czyli select * from tabela where id > 7 order by rand() limit 5;
sortowanie rand jest srednim wyjsciem z punktu widzenia optymalizacji, ale najlatwiejszym do napisania na poczatek



Niestety każdy rekord ma inny warunek ( czyli rozumiem ze tutaj jednym zapytaniem nie uda się nic działać potrzeba użyć kilku zapytań ?)

Co do wyciągania 3 losowych rekordów z bazy potrzebował bym jak najoptymalniejsze może coś takiego doradzić...

Jest ktoś w stanie pomóc?
lobopol
Jasne, że można zmienić wiele różnych rekordów jednym zapytaniem, ale nie jest to zbyt wydajne można np. użyć takiej konstrukcji:
  1. UPDATE
  2. users
  3. SET
  4. login =
  5. CASE
  6. WHEN id=1 THEN 'adsfdsfsfdsf'
  7. WHEN id=2 THEN 'bdsfdsfsdfsd'
  8. WHEN id=3 THEN 'csdfsdfdsfdsf'
  9. END,
  10. `password` =
  11. CASE
  12. WHEN id=1 THEN 'adsfdsfsfdsf'
  13. WHEN id=2 THEN 'bdsfdsfsdfsd'
  14. WHEN id=3 THEN 'csdfsdfdsfdsf'
  15. END
  16. WHERE id IN(1,2,3);

Czas wykonani na tabeli z 3 000 000 rekordów (myIsam) bliskie 0 tongue.gif na innoDb 0,031s (taki sam układ i liczba rekordów tylko klucze obce)
homik363
Cytat(lobopol @ 20.02.2011, 10:47:59 ) *
Jasne, że można zmienić wiele różnych rekordów jednym zapytaniem, ale nie jest to zbyt wydajne można np. użyć takiej konstrukcji:
  1. UPDATE
  2. users
  3. SET
  4. login =
  5. CASE
  6. WHEN id=1 THEN 'adsfdsfsfdsf'
  7. WHEN id=2 THEN 'bdsfdsfsdfsd'
  8. WHEN id=3 THEN 'csdfsdfdsfdsf'
  9. END,
  10. `password` =
  11. CASE
  12. WHEN id=1 THEN 'adsfdsfsfdsf'
  13. WHEN id=2 THEN 'bdsfdsfsdfsd'
  14. WHEN id=3 THEN 'csdfsdfdsfdsf'
  15. END
  16. WHERE id IN(1,2,3);

Czas wykonani na tabeli z 3 000 000 rekordów (myIsam) bliskie 0 tongue.gif na innoDb 0,031s (taki sam układ i liczba rekordów tylko klucze obce)



Czyli lepiej użyć takiego zapytania czy 4 osobnych zapytań?
Fifi209
Lepiej jednego.

Dlaczego? Wykonasz tylko jedno połączenie z bazą i tylko raz będziesz musiał obsłużyć odpowiedź.
homik363
Ok dzięki ponieważ skrypt będzie wykonywał się ok 200k razy dziennie dlatego potrzebuje jak najoptymalniejszego rozwiązania.

Czy znacie jeszcze jakieś optymalne zapytanie do bazy żeby wyciągnąć 4 losowych rekordów gdzie np id > 9
greycoffey
Cytat(homik363 @ 20.02.2011, 12:16:17 ) *
Ok dzięki ponieważ skrypt będzie wykonywał się ok 200k razy dziennie dlatego potrzebuje jak najoptymalniejszego rozwiązania.

Czy znacie jeszcze jakieś optymalne zapytanie do bazy żeby wyciągnąć 4 losowych rekordów gdzie np id > 9

Coś nie wierze, że projekt pisany przez Ciebie, będzie obsługiwał 200 000 wywołań dziennie czyli ~2,31 wywołań na sekundę. Masz problem z prostymi zapytaniami, pewnie indeksu nie założyłeś na te wyszukiwane wartości. Jak chcesz, żeby skrypt był wydajny, to napisz, a nie wymyślaj jakieś dużej liczby wywołań dziennie.
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.