![]() |
![]() ![]() |
![]() |
![]() ![]()
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 ![]() 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 ![]() Ten post edytował PiXel2.0 20.12.2007, 04:27:35 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 1 Dołączył: 6.04.2005 Skąd: Janikowo Ostrzeżenie: (0%) ![]() ![]() |
Zgodnie z dokumentacją MYSQL składnia DELETE przedstawia się następująco:
Kod DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [WHERE where_condition] [ORDER BY ...] [LIMIT row_count] Poniżej jest też napisane: Cytat If the ORDER BY clause is specified, the rows are deleted in the order that is specified. The LIMIT clause places a limit on the number of rows that can be deleted. Więc... ja bym spróbował: Kod DELETE FROM produkty ORDER BY cena LIMIT 10 Nigdy czegoś takiego nie robiłem, ale to chyba powinno zadziałać. Taka konstrukcja zapytania możliwa jest tylko, jeśli wysyłasz je do jednej tabeli. Ten post edytował HuTu 20.12.2007, 06:33:45 |
|
|
![]()
Post
#3
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Chodzi o to aby za pomoca DELETE usunac te 7 rekordow w ktorych wartosc pola 'cena' jest najmniejsza.
// EDIT aczkolwiek... lepiej tak:
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 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 110 Pomógł: 13 Dołączył: 16.03.2007 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Dzieki
![]() Myslalem, ze ORDER BY i LIMIT moga wystepowac tylko za SELECT. Musze sie wziasc za nauke SQL'a bo jeszcze cienki w tym jestem. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 7.06.2025 - 13:03 |