Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Suma pól w wierszu (nie wszystkich)
Forum PHP.pl > Forum > Bazy danych
shima
Moje pytanie tutaj:

http://forum.php.pl/viewtopic.php?t=9704

zostało potraktowane w kategoriach żartu (chyba), więc ponawiam, zapewniając, że jest poważne.

Załóżmy, że mam tabelę

[sql:1:ec94ab04e5]CREATE TABLE `tak_nie` (
`kto` VARCHAR( 25 ) NOT NULL ,
`b1` TINYINT NOT NULL ,
`b2` TINYINT NOT NULL ,
`b3` TINYINT NOT NULL ,
`b4` TINYINT NOT NULL ,
`suma` INT NOT NULL ,
UNIQUE (
`kto`
)
);
[/sql:1:ec94ab04e5]

dla każdego wiersza "kto" chciałbym zsumować wartości pól b1, b2, b3, b4 i zapisać wynik w suma. Problem: nie wiem ile będę miał tych bx, a chciałbym zsumować wszystkie. Nie wiem, czy to pomoże, ale wszystkie kolumny mają ten sam człon główny, a różnią się liczbą na końcu. Jak w powyższym przykładzie. Mogę sobie poradzić z koaktencją, ale jak określić pola, z których czytam?
mhs
nie zabardzo rozumiem co Ty chcesz osiagnac ale z tego co zauwazylem:

chcesz przechowywac w dodatkowym polu sume wartosci pozostalych pol - czegos takiego sie nie robi gdyz jezeli bedziesz potrzebowal sume to zawsze sobie ja wyliczysz w momencie gdy bedziesz potrzebowal; jest to sprzeczne z zasadami budowy baz danych -> przechowujesz dodatkowe (zbedne) dane

zastanow sie dobrze czy chcesz cos takiego przechowywac w bazie danych

ciekaw jestem tez jak obsluzysz zmienna liczbe bx.... -> ja na Twoim miejscu zastanowilbym sie czy nie zaprojektowac bazy danych od poczatku
scanner
Musiałbyś wybrać z tabeli nazwy pól:[sql:1:e6056c230b]SHOW COLUMNS FROM tak_nie[/sql:1:e6056c230b]A nastęopnie zbudowac przy pomocy pętli dynamiczne zapytanie, w którym zsumujesz kolumny.
spenalzo
Sume wszystkich pól możesz uzyskać tak:
[sql:1:de92738aff]SELECT (b1 + b2 + b3 + b4) AS suma FROM tak_nie[/sql:1:de92738aff]

Natomiast od razu zmienić wartości chyba się nie da - nie mogę nic znaleźć na ten temat w manualu...

UPDATE:
#-o DeyV .... smile.gif Zapomniałem o update smile.gif
DeyV
Samo zapytanie do zliczenia i zapisania tych danych jest bardzo proste:

[sql:1:075f1199c7]Update `tak_nie`
SET
`suma` = b1 + b2 + b3[/sql:1:075f1199c7]

Niestety - nie ma chyba możliwości, by z poziomu MySQL wybrać tylko interesujące cię kolumny.
Oznacza to że całą listę kolumn które chcesz zsumować musisz przygotować w php, i zadać gotowe zapytanie.
A przykład, jak pobrać listę kolumn z tabeli jest tu:
[manual:075f1199c7]mysql_list_fields[/manual:075f1199c7]
shima
Cytat
ciekaw jestem tez jak obsluzysz zmienna liczbe bx.... -> ja na Twoim miejscu zastanowilbym sie czy nie zaprojektowac bazy danych od poczatku


Raczej nie będę musiał, bo ta baza nie istnieje winksmiley.jpg Oczywiście wiem, że mogę to zrobic z poziomu php, ale używam phpMyAdmin-a i wiele z tych informacji służy jedynie mojemu zorientowaniu się w ... Dlatego nie chce mi się pisać skryptów. Jeżeli chce posortować pola wg. sumy to skryptem mogę zrobić to zawsze (chyba). Podsunęliście mi parę pomysłów, pokombinuję, dzięki.

PS. Jak wyciągnąć z mysql-a w miarę szybko listę baz i tabel? Jest jakaś prosta funkcja w php?
scanner
To skoro nie istnieje, to co nam głowę zawracasz? aaevil.gif
http://www.mysql.com/doc/en/SHOW.html
shima
Cytat
To skoro nie istnieje, to co nam głowę zawracasz?  :twisted:

Choćby po to, żeby się dowiedzieć, że nie ma sensu jej tworzyć. Zrobię inną

[sql:1:5e470c3568]CREATE TABLE `tak_nie_suma` (
`kto` VARCHAR( 25 ) NOT NULL ,
`suma` INT NOT NULL ,
UNIQUE (
`kto`
)
);[/sql:1:5e470c3568]

update-owaną przez skrypt. Musze tylko wymyśleć zgrabny i uniwersalny skrypt.
mhs
skoro szukasz pomyslow to podsune Ci jeszcze jeden:

Cytat
Jeżeli chce posortować pola wg. sumy to skryptem mogę zrobić to zawsze (chyba).


oczywiscie mozesz sobie posortowac skryptem ale pamietaj ze istnieje w jezyku SQL cos takiego jak:
[sql:1:cb54e49034]... ORDER BY nazwaPola ASC lub DESC[/sql:1:cb54e49034]

w wyniku takiego zapytania dostaniesz juz posortowane dane
shima
Cytat
skoro szukasz pomyslow to podsune Ci jeszcze jeden:

Cytat
Jeżeli chce posortować pola wg. sumy to skryptem mogę zrobić to zawsze (chyba).


oczywiscie mozesz sobie posortowac skryptem ale pamietaj ze istnieje w jezyku SQL cos takiego jak:
[sql:1:60a15cb288]... ORDER BY nazwaPola ASC lub DESC[/sql:1:60a15cb288]

w wyniku takiego zapytania dostaniesz juz posortowane dane


Tak, wiem, pozostaje kwestia, gdzie sumować, w skrypcie, czy mysql-u, bo sortowanie będzie po sumie.
Myślę, że nie ma sensu ciągnąć tego wątku, chyba wiem dostatecznie dużo, żeby to zrobić. Dzięki wszystkim
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.