Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php -mysql] zapytanie
rychu123
post
Post #1





Grupa: Zarejestrowani
Postów: 194
Pomógł: 1
Dołączył: 18.09.2008

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


Witam, mam mały problem z stworzeniem zapytania do bazy danych.

Mam taką tabele

  1. CREATE TABLE IF NOT EXISTS `kwota` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `data` date NOT NULL,
  4. `kwota` int(11) NOT NULL,
  5. `kwota_na` int(11) NOT NULL,
  6. PRIMARY KEY (`id`)
  7. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
  8.  
  9. --
  10. -- Zrzut danych tabeli `kwota`
  11. --
  12.  
  13. INSERT INTO `kwota` (`id`, `data`, `kwota`, `kwota_na`) VALUES
  14. (1, '2010-04-20', 100, 0),
  15. (2, '2010-04-24', 50, 0),
  16. (3, '2010-04-21', 100, 0),
  17. (4, '2010-04-22', 250, 0),
  18. (5, '2010-04-23', 300, 0);


i chciałbym stworzyć zapytanie ze by do pola kwota_na wstawiało dane ale w taki sposób że

data kwota kwota_na
2010-04-20 100 100
2010-04-21 100 200
2010-04-22 250 450
2010-04-23 300 730
itd..
proszę o pomoc

.
Go to the top of the page
+Quote Post
luck
post
Post #2





Grupa: Zarejestrowani
Postów: 317
Pomógł: 58
Dołączył: 6.11.2005

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


Tak z palca, ale mniej więcej o to Ci chyba chodzi:
  1. UPDATE kwota k1 SET k1.kwota_na = (SELECT SUM(k2.kwota) FROM kwota k2 WHERE k2.id < ?) WHERE k1.id = ?
Za ? wstawiasz sobie id rekordu, który aktualizujesz.
Go to the top of the page
+Quote Post
rychu123
post
Post #3





Grupa: Zarejestrowani
Postów: 194
Pomógł: 1
Dołączył: 18.09.2008

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


Cytat(luck @ 24.04.2010, 18:15:39 ) *
Tak z palca, ale mniej więcej o to Ci chyba chodzi:
  1. UPDATE kwota k1 SET k1.kwota_na = (SELECT SUM(k2.kwota) FROM kwota k2 WHERE k2.id < ?) WHERE k1.id = ?
Za ? wstawiasz sobie id rekordu, który aktualizujesz.


mysql wywalił błąd : You can't specify target table 'k1' for update in FROM clause
Go to the top of the page
+Quote Post
luck
post
Post #4





Grupa: Zarejestrowani
Postów: 317
Pomógł: 58
Dołączył: 6.11.2005

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


Racja. Najprościej będzie to rozbić na 2 zapytania. Najpierw pobierz wynik takiego zapytania:
  1. SELECT SUM(k2.kwota) FROM kwota k2 WHERE k2.id < ?
i rezultat wstaw do drugiego:
  1. $sql = 'UPDATE kwota k1 SET k1.kwota_na = '. $wynik .' WHERE k1.id = '. $id;
Ten sposób musi zadziałać na 100%. Chyba że zależy Ci, żeby wszystko odbyło się w jednym zapytaniu?

Ten post edytował luck 24.04.2010, 19:23:06
Go to the top of the page
+Quote Post
rychu123
post
Post #5





Grupa: Zarejestrowani
Postów: 194
Pomógł: 1
Dołączył: 18.09.2008

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


wolał bym w jednym

pomocy
Go to the top of the page
+Quote Post
luck
post
Post #6





Grupa: Zarejestrowani
Postów: 317
Pomógł: 58
Dołączył: 6.11.2005

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


No dobra, skoro tak Ci zależy na jednym zapytaniu to proszę:
  1. UPDATE kwota
  2. SET kwota_na = (
  3. SELECT SUM(kwota) FROM (
  4. SELECT * FROM kwota
  5. ) kw
  6. WHERE id <= ?)
  7. WHERE id = ?;
Go to the top of the page
+Quote Post

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: 23.12.2025 - 17:30