Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SQL] Usuwanie wyznaczonej liczby rekordow ktorych konkretne pola maja najmniejsza/najwieksza wartosc w tabeli
PiXel2.0
post
Post #1





Grupa: Zarejestrowani
Postów: 110
Pomógł: 13
Dołączył: 16.03.2007
Skąd: Łódź

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


Mam tabele w ktore sa pola zawierajace wartosc liczbowa i chcialbym skonstruowac JEDNO zapytanie ktore wykona pewna operacje.

Powiedzmy, ze ta tabela zawiera top 100 najdrozszych produktow a pole 'cena' zawiera cene produktu.
Tabela powinna zawierac maksymalnie 100 produktow wiec gdy do tabeli zostanie dodanych 7 nowych o wysokiej cenie to tyle samo starych trzeba usunac (oczywiscie przedstawiona wyzej sytuacja jest fikcyjna i wymyslilem ja aby najprosciej przedstawic moj problem bo jest on nieco bardziej zlozony).

Chodzi o to aby za pomoca DELETE usunac te 7 rekordow w ktorych wartosc pola 'cena' jest najmniejsza.
Czy jest to mozliwe do osiagniecia za pomoca tylko jednego zapytania (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

Normalnie najpierw pobralbym okreslona liczbe rekordow w ktorych wartosc pola 'cena' jest najnizsza przy pomocy ORDER BY oraz LIMIT w celu pozyskania kluczy tych rekordow a pozniej za pomoca kolejnego zapytania usunal te rekordy na podstawie wczesniej pobranych kluczy, ale to dwa lub wiecej zapytan a ja chcialbym to zrobic za pomoca tylko jednego zapytania.

Czy jest to mozliwe a jesli tak to w jaki sposob (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

Ten post edytował PiXel2.0 20.12.2007, 04:27:35
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(PiXel2.0 @ 20.12.2007, 06:26:31 ) *
Chodzi o to aby za pomoca DELETE usunac te 7 rekordow w ktorych wartosc pola 'cena' jest najmniejsza.

  1. DELETE FROM tabela ORDER BY cena DESC LIMIT 7 ;

// EDIT
aczkolwiek... lepiej tak:
  1. DELETE FROM tabela WHERE cena IN (SELECT DISTINCT cena FROM tabela ORDER BY cena DESC LIMIT 7 );


Pierwsze zapytanie usunie po prostu 7 rekordów o najniższej cenie czyli mając np.
Kod
10
20
30
40
50
60
70
70
70

te 2 ostatnie 70 nie zostaną usunięte. Drugie zapytanie natomiast powinno usunąć poprawnie wszystkie te rekordy.

Ten post edytował phpion.com 20.12.2007, 06:33:47
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 12.10.2025 - 01:25