Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php -mysql] zapytanie
Forum PHP.pl > Forum > PHP
rychu123
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

.
luck
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.
rychu123
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
luck
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?
rychu123
wolał bym w jednym

pomocy
luck
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 = ?;
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.