Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Kasowanie nadmiaru danych
Spirit86
post 20.09.2005, 16:43:20
Post #1





Grupa: Zarejestrowani
Postów: 607
Pomógł: 23
Dołączył: 8.09.2004
Skąd: Wrocław

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


Mam problem, chcę skasować nadmair wpisów do bazy danych.

Na początku wypisuję wszystkie rekordy za pomocą pętli. Zliczam je. Po czym chcę skasować nadmiar, wykonuje polecenie

  1. DELETE
  2. FROM `tabela` WHERE costam='costaminnego' ORDER BY `date` ASC LIMIT 1*

* - Limit: 1 wziął się z LiczbaRekordów - MaksymalnaLiczbaRekordów, wcześniej założyłem, że ta liczba jest dodatnia.
Zapytanie jest poprawne, do tego momentu:

  1. DELETE
  2. FROM `tabela` WHERE costam='costaminnego' LIMIT 1


Nie mogę dodać ważnego wpisu:
  1. ORDER BY `date`


--------------------
Audio: Metallica, Soil, RHCP, OffSpring, Green Day, "Retro", Gorillaz, Disturbed, Coma
DB: MySQL 4.1 | php: 4.4.3 Pomogłem Ci? Wciśnij przycisk POMÓGŁ.
Go to the top of the page
+Quote Post
zbig13
post 20.09.2005, 17:53:17
Post #2





Grupa: Zarejestrowani
Postów: 214
Pomógł: 0
Dołączył: 3.04.2004
Skąd: Legionowo

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


No bo ORDER BY jest tylko do zapytania SELECT, bo przecież sortowanie przydaje się głównie przy wyświetlaniu wyników, a nie przy kasowaniu ich. Jeśli chcesz wykasować dane, o konkretnej dacie, to możesz najpierw wybrać je SELECTEM, a potem wykasować.

  1. <?php
  2.  
  3. $zapytanie = "SELECT * FROM 'tabela' WHERE costam='costaminnego' ORDER BY date LIMIT 1";
  4. $wynik = mysql_query ($zapytanie);
  5.  
  6. while ($row = mysql_fetch_array($wynik, MYSQL_ASSOC)) {
  7.  $del_query = "DELETE FROM 'tabela' WHERE costam='costaminnego' AND date='".$row['date']."'";
  8.  $del = mysql_query ($del_query);
  9. }
  10.  
  11. ?>
Go to the top of the page
+Quote Post
Spirit86
post 20.09.2005, 18:02:46
Post #3





Grupa: Zarejestrowani
Postów: 607
Pomógł: 23
Dołączył: 8.09.2004
Skąd: Wrocław

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


Cytat(zbig13 @ 2005-09-20 17:53:17)
No bo ORDER BY jest tylko do zapytania SELECT

tego pewien nie jestem, bo kiedyś już używałem ORDERA przy kasowaniu, z tego co pamiętam.
To jest bez sensu, 2 dodatkowe pytania zamiast jednego, musi się dac za pomocą jednego pytania.


--------------------
Audio: Metallica, Soil, RHCP, OffSpring, Green Day, "Retro", Gorillaz, Disturbed, Coma
DB: MySQL 4.1 | php: 4.4.3 Pomogłem Ci? Wciśnij przycisk POMÓGŁ.
Go to the top of the page
+Quote Post
Kicok
post 20.09.2005, 18:40:56
Post #4





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


Znaczy wywala jakiś błąd? Bo u mnie to zapytanie działa dobrze (testowane na phpmyadminie, z tym że sortowałem po danych liczbowych a nie po dacie - ale to nie ma większego znaczenia)


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
Spirit86
post 20.09.2005, 18:58:23
Post #5





Grupa: Zarejestrowani
Postów: 607
Pomógł: 23
Dołączył: 8.09.2004
Skąd: Wrocław

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


Problem polega na tym, że jak dam
  1. DELETE
  2. FROM `tabela` WHERE JAKIS WARUNEK
  3. ORDER BY `date` ASC LIMIT 2

jakiś warunek, wtedy się sypie i w phpmyadmin i w skrypcie. :\

moje pytanie:
  1. DELETE
  2. FROM `tabela` ORDER BY `date` ASC WHERE UPPER( cos ) = 'los' LIMIT 1


wywala błąd:
  1. #1064 - Something is wrong in your syntax obok 'ORDER by `date` ASC WHERE UPPER( cos ) = 'los' LIMIT 1' w linii 1

który jak zwykle nie wiele mówi winksmiley.jpg

Ten post edytował Spirit86 20.09.2005, 19:00:50


--------------------
Audio: Metallica, Soil, RHCP, OffSpring, Green Day, "Retro", Gorillaz, Disturbed, Coma
DB: MySQL 4.1 | php: 4.4.3 Pomogłem Ci? Wciśnij przycisk POMÓGŁ.
Go to the top of the page
+Quote Post
Kicok
post 20.09.2005, 19:23:37
Post #6





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


bo ORDER BY dajemy po warunkach


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
Spirit86
post 20.09.2005, 19:37:06
Post #7





Grupa: Zarejestrowani
Postów: 607
Pomógł: 23
Dołączył: 8.09.2004
Skąd: Wrocław

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


próbowałem i tak i tak. Przez przypadek wkleiłem nie ten kod, co trzeba, normalnie mam WARUNEK, ORDER


--------------------
Audio: Metallica, Soil, RHCP, OffSpring, Green Day, "Retro", Gorillaz, Disturbed, Coma
DB: MySQL 4.1 | php: 4.4.3 Pomogłem Ci? Wciśnij przycisk POMÓGŁ.
Go to the top of the page
+Quote Post
sobstel
post 20.09.2005, 20:26:03
Post #8





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

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


Cytat(Spirit86 @ 2005-09-20 19:37:06)
próbowałem i tak i tak. Przez przypadek wkleiłem nie ten kod, co trzeba, normalnie mam WARUNEK, ORDER

że się upewnie, kolejnosc masz WHERE, ORDER, LIMIT ?

tak czy owak, order oczywiscie mozna stosowac w delete


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
Spirit86
post 20.09.2005, 21:20:04
Post #9





Grupa: Zarejestrowani
Postów: 607
Pomógł: 23
Dołączył: 8.09.2004
Skąd: Wrocław

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


  1. DELETE
  2. FROM `tabela` WHERE UPPER( cos ) = 'los'
  3. ORDER BY `date` ASC LIMIT 1


nie wiem, co Wy posty chcecie nabić, czy co?


--------------------
Audio: Metallica, Soil, RHCP, OffSpring, Green Day, "Retro", Gorillaz, Disturbed, Coma
DB: MySQL 4.1 | php: 4.4.3 Pomogłem Ci? Wciśnij przycisk POMÓGŁ.
Go to the top of the page
+Quote Post
mike
post 20.09.2005, 21:35:55
Post #10





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


1. Nie to forum. Przenoszę na: Bazy danych.
2.
Cytat(Spirit86 @ 2005-09-20 18:02:46)
Cytat(zbig13 @ 2005-09-20 17:53:17)
No bo ORDER BY jest tylko do zapytania SELECT

tego pewien nie jestem, (...)

Za to ja jestem pewien. ORDER BY można używać w konstrukcji DELETE. Jeżeli ktoś ma wątpliwości: DELETE Syntax

3. ORDER BY można stosować w konstrukcji DELETE dopiero od wersji 4.0.2 MySQL'a (bo podejrzewam że to o nim mowa). Może masz starszego.

Poza tym zapytanie które napisałeś w ostatnim poście powinno działać.
Go to the top of the page
+Quote Post
Spirit86
post 20.09.2005, 22:42:12
Post #11





Grupa: Zarejestrowani
Postów: 607
Pomógł: 23
Dołączył: 8.09.2004
Skąd: Wrocław

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


Tak chodzi o MySQL.
Masz rację, mam starą wersję: 3.23.58 :\
Ech nie da się tego wykonać, aby było kompatibilne ze starszymiy wersjami bazy danych? To bardzo ważne smile.gif Może innaczej zmodyfikowac zapytanie / mam ilośc rekordów, ilość dozwolonych rekordów.


--------------------
Audio: Metallica, Soil, RHCP, OffSpring, Green Day, "Retro", Gorillaz, Disturbed, Coma
DB: MySQL 4.1 | php: 4.4.3 Pomogłem Ci? Wciśnij przycisk POMÓGŁ.
Go to the top of the page
+Quote Post
mike
post 21.09.2005, 07:58:14
Post #12





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(Spirit86 @ 2005-09-20 22:42:12)
Ech nie da się tego wykonać, aby było kompatibilne ze starszymiy wersjami bazy danych?

Niestety, nie da się.

Alternatywą byłoby podzapytanie, ale Twoja wersja MySQL'a też ich nie obsłuży.

Jedyne wyjście w tej sytuacji podał zbig13. Ale zamiast tego polecałbym Ci zmianę MySQL'a na 4.1 bo pomijając że sam MySQL jest niedorozwiniętą bazą danych, to wresja 3.23.58 to już zamierzchłe czasy epoki lodowcowej.
Go to the top of the page
+Quote Post
Spirit86
post 21.09.2005, 10:48:01
Post #13





Grupa: Zarejestrowani
Postów: 607
Pomógł: 23
Dołączył: 8.09.2004
Skąd: Wrocław

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


Cytat(mike_mech @ 2005-09-21 07:58:14)
wresja 3.23.58 to już zamierzchłe czasy epoki lodowcowej.

Taka wersja jest dołączona do najnowszego Krasnala winksmiley.jpg.
Ściągnełem najnowszą wersję, wgrałem ja i wszystko gra.
Zastanawiam sie tylko czy nie zrobić jakiegoś dodatkowego polecenia, bo nie na wszystkich serwerach jest MySQL 4+. Standartem jest, jeszcze, wersja 3.*.*, czy mi się wydaje? Potrzebuję tej informacji ze względu na to, że piszę to do CMS'a, który stram się pisać zgodny ze starszymi wersjami php oraz MySQL.


--------------------
Audio: Metallica, Soil, RHCP, OffSpring, Green Day, "Retro", Gorillaz, Disturbed, Coma
DB: MySQL 4.1 | php: 4.4.3 Pomogłem Ci? Wciśnij przycisk POMÓGŁ.
Go to the top of the page
+Quote Post
dr_bonzo
post 21.09.2005, 11:00:56
Post #14





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Na serwerach jest glownie wersja 4.0, zadko 4.1. Tak ze pisz conajmniej pod 4.0, bo zanim skonczysz to juz nie bedzie 3ki, a byc moze zapanuje czas 4.1.

Cytat
piszę to do CMS'a, który stram się pisać zgodny ze starszymi wersjami php oraz MySQL.

Ale po co -- chyba nie piszesz pod php3? Wiekszosc hostingow posiada najnowesze wersje oprogramowania (lub starsze, rozniace sie cyfra na ostatniej pozycji wersji), a pisanie w zgodnosci ze starymi wersjami uniemozliwi ci skorzystanie z mozliwosci nowych wersji.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post

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 Wersja Lo-Fi Aktualny czas: 19.07.2025 - 18:22