Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Suma pól w wierszu (nie wszystkich)
shima
post 7.01.2004, 13:52:57
Post #1





Grupa: Zarejestrowani
Postów: 245
Pomógł: 0
Dołączył: 9.09.2002

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


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?


--------------------
Nie ma nic stałego prócz zmiany...
Go to the top of the page
+Quote Post
mhs
post 7.01.2004, 14:08:06
Post #2





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

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


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
Go to the top of the page
+Quote Post
scanner
post 7.01.2004, 14:08:20
Post #3





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




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.


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
spenalzo
post 7.01.2004, 14:10:25
Post #4





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

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


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


--------------------

Go to the top of the page
+Quote Post
DeyV
post 7.01.2004, 14:11:41
Post #5





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




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]


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
shima
post 7.01.2004, 14:34:58
Post #6





Grupa: Zarejestrowani
Postów: 245
Pomógł: 0
Dołączył: 9.09.2002

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


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?


--------------------
Nie ma nic stałego prócz zmiany...
Go to the top of the page
+Quote Post
scanner
post 7.01.2004, 14:39:19
Post #7





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




To skoro nie istnieje, to co nam głowę zawracasz? aaevil.gif
http://www.mysql.com/doc/en/SHOW.html


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
shima
post 7.01.2004, 14:55:30
Post #8





Grupa: Zarejestrowani
Postów: 245
Pomógł: 0
Dołączył: 9.09.2002

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


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.


--------------------
Nie ma nic stałego prócz zmiany...
Go to the top of the page
+Quote Post
mhs
post 7.01.2004, 22:20:45
Post #9





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

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


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
Go to the top of the page
+Quote Post
shima
post 8.01.2004, 10:14:42
Post #10





Grupa: Zarejestrowani
Postów: 245
Pomógł: 0
Dołączył: 9.09.2002

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


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


--------------------
Nie ma nic stałego prócz zmiany...
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: 18.08.2025 - 22:20