[ sassaboss @ 04.11.2006. 12:18 ] @
Imam jedan problem.

U mojoj tabeli imam integer kolonu u koju se smestaju razne cifre.
Na koji nacin da definisem komandu koja bi proveravala sumu te kolone
i kada dodje do sume vece od npr. 5000 da sve posle toga obrise.

hvala
[ misk0 @ 04.11.2006. 22:29 ] @
Zavisi od programskog jezika ali SQL bi treba ovako da izgleda
SELECT SUM(ime_kolone) FROM ime_tabele

Onda u programu ispitas vrijednost

if vracena_vrijednost > 500 then DELETE FROM ime_tabele
[ Dejan Topalovic @ 05.11.2006. 01:38 ] @
Hm, nisam siguran da sam te najbolje razumio za dio o "brisanju" nakon sto suma predje 5000. Da li mislis mozda da se ne prikazuju rezultati kada suma predje 5 000 ili da se odredjeni redovi brisu iz tabele (sa DELETE)?

Ako samo zelis izbaciti te redove iz rezultata pri ispisu, onda mozes ovako (sa GROUP BY, a mozes i bez):
Code:
SELECT SUM(kolona) AS suma
FROM tabela
GROUP BY neka_kolona
HAVING suma <= 5000;
[ zikaa @ 05.11.2006. 15:32 ] @
Pod pretpostavkom da imas neki id po kime ih redjas (u koloni a i u sabiranju) npr posle
CREATE TABLE tabela(id INT UNSIGNED AUTO_INCREMENT NOT NULL, broj INT, PRIMARY KEY (id))

da bi dobio sve kolone koje su ti visak upit je
Code:

SELECT p.id, SUM( IF( q.id <= p.id, q.broj , 0 ) ) AS suma
FROM tabela p, tabela q
GROUP BY id
HAVING suma >5000


ako tabela izgleda ovako
CREATE TABLE tabela(broj INT UNSIGNED NOT NULL, PRIMARY KEY (broj))
upit bi mogao biti
Code:

SELECT p.broj, SUM( IF( q.broj <= p.broj, q.broj , 0 ) ) AS suma
FROM tabela p, tabela q
GROUP BY id
HAVING suma >5000


Ovaj drugi ce brisati vrste sa najvecim vrednostima broj-a.

U oba slucaja mora da postoji neki kriterijum na osnovu kog ces da ih redjas moze to da bude bilo koje polje a ne samo id (iiz onoga SUM( IF( q.id <= p.id, q.broj , 0 ) )
na primer i varchar i druga. Bitno je da postoji jedno koje ce da sluzi za uredjenje niza cije parcijalne sume racunas.
Ako imas mysql 5 u prvom slucaju mozes i da ih obrises jednim potezom
Code:

DELETE FROM tabela t WHERE id IN 
(SELECT id FROM 
      (SELECT p.id, SUM( IF( q.id <= p.id, q.broj , 0 ) ) AS suma
      FROM tabela p, tabela q
     GROUP BY id
     HAVING suma >5000
   ) AS tmp1
) AS tmp0


a u drugom slicno
[ sassaboss @ 05.11.2006. 17:05 ] @
Mysql mi je 4.1

Ja imam redne brojeve (od 1 do 200 npr.) za tabelu u kojoj se smestaju te cifre koje sam vec napomenuo
znaci cifra 300 moze da ima redni broj 1 a cifra 250 moze da bude pod rednim brojem 2 itd.
(npr kolona RED ima redne brojeve a kolona TAD u njoj smestam cifre )

Meni sada treba da nadjem nacim kako da izbrisem od zadnjeg reda u tabeli sve do onog reda
gde suma svih cifara u koloni TAD ne prelazi npr 5000.
Tj. ako imam

RED - TAD
1 - 1000
2 - 500
3 - 800
4 - 2500
5 - 1700
6 - 670
7 - 990

Kako bi sad izgledala komanda koja bi obrisala odozdo nagore sve redove do onog
gde suma u TAD ne pralazi 4800.

Hvala
[ zikaa @ 05.11.2006. 18:23 ] @
Pa dobro covek jel si pismen sve ti pise.
Jel znas ti nesto o php-u uopste , pogledaj primer odozgo prvi slucaj ,
napravi tabelu povezi se na bazu pokupi id-ijeve i obrisi brojeve sa datim id-ijevima.
Ako ne znas toliko nadji nekog da ti napise skript i nemoj se dzabe muciti.