![]() |
![]() ![]() |
![]() |
![]()
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...
|
|
|
![]()
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 |
|
|
![]()
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.
-------------------- |
|
|
![]()
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 .... ![]() ![]() -------------------- |
|
|
![]()
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..."
|
|
|
![]()
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 ![]() 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...
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław ![]() |
-------------------- |
|
|
![]()
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...
|
|
|
![]()
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 |
|
|
![]()
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...
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 18.08.2025 - 22:20 |