Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [sql][php] Rozdzielenie zawartości rekordu
pianta_d
post 17.01.2007, 21:14:46
Post #1





Grupa: Zarejestrowani
Postów: 176
Pomógł: 18
Dołączył: 5.01.2007

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


Witam ponownie. W jednej kolumnie mam zawary, przykładowo, taki ciąg: Mariusz 200.
Pierwasza wartość mnie wogóle nie interesuje, natomiast druga wartość to kwota. Problem jest taki, że muszę rozdzielić obie wartości, zsumować drugą i wrzucić w odpowiednie pole na formularzu.

Ten post edytował pianta_d 17.01.2007, 21:15:27
Go to the top of the page
+Quote Post
AxZx
post 17.01.2007, 21:27:10
Post #2





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


to zaprojektuj tak baze
2 kolumny: w jednej imie, w drugiej kwota

ale jezeli juz musisz tak, to mozesz w php skorzystac z wyrazenia regularnego ktory ci zostawi tylko liczby, wstawiasz wynik do tablicy i sumujesz w jakiejs petli, a nastepnie wstawiasz w formularz.


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
pianta_d
post 17.01.2007, 21:40:52
Post #3





Grupa: Zarejestrowani
Postów: 176
Pomógł: 18
Dołączył: 5.01.2007

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


Wiem, że rozdzielenie bazy byłoby w tym miejscu najlepszym rozwiązaniem, ale niestety odziedziczyłem ten pasztet po "przodkach".

Cytat
mozesz w php skorzystac z wyrazenia regularnego ktory ci zostawi tylko liczby, wstawiasz wynik do tablicy i sumujesz w jakiejs petli


Można coś więcej??
Go to the top of the page
+Quote Post
mike
post 17.01.2007, 21:58:50
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Jest taka zasada, jeśli coś może zrealizować baza danych to powinna to zrobić.
Zrzucanie tego na php jest złe tongue.gif

Przykład:
  1. SELECT SUBSTRING_INDEX(COLUMN,' ',1) AS name, SUBSTRING_INDEX(COLUMN,' ',-1) AS number FROM TABLE;

Wyniki zapytania możesz wstawić w dowolne miejsce smile.gif
Go to the top of the page
+Quote Post
pianta_d
post 17.01.2007, 22:20:05
Post #5





Grupa: Zarejestrowani
Postów: 176
Pomógł: 18
Dołączył: 5.01.2007

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


mike_mech jest super. teraz wiem cze czegos mozna sie tutaj dowiedziec.
dziekuje Ci bardzo, pozdrawiam

Wszystko pieknie dziala, ale mam jeszczejedno pytanko, czy da sie w tej instrukcji SELECT zsumowac kolumne number. jesli nie to jak to mozna zrobic??
Go to the top of the page
+Quote Post
mike
post 17.01.2007, 22:27:50
Post #6





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Napisze pseudokodem, pokombinujesz to na pewno dojdziesz smile.gif
Jak nie, to pomogę smile.gif

Kod
sumuj(  zrzutuj_na_liczbę(  wytnij_kawałek_stringa()  )  )


SUM()
CAST()
SUBSTRING_INDEX()

MySQL 5.0 Reference Manual


P.S.
Taki mam styl odpowiadania.
Jeden nauczony jest wart więcej niż dziesięciu, którzy pytaj o to samo smile.gif
Go to the top of the page
+Quote Post
pianta_d
post 17.01.2007, 22:40:55
Post #7





Grupa: Zarejestrowani
Postów: 176
Pomógł: 18
Dołączył: 5.01.2007

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


OK, dzieki. pomecze sie i dam odpowiedz jutro.

pzdr
Go to the top of the page
+Quote Post
AxZx
post 17.01.2007, 23:10:09
Post #8





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


Cytat(mike_mech @ 17.01.2007, 21:58:50 ) *
Jest taka zasada, jeśli coś może zrealizować baza danych to powinna to zrobić.
Zrzucanie tego na php jest złe tongue.gif


zgadzam sie:) w mysql mozna nawet regex uzywac wiec mozna wszystko:)

Cytat(mike_mech @ 17.01.2007, 22:27:50 ) *
P.S.
Taki mam styl odpowiadania.
Jeden nauczony jest wart więcej niż dziesięciu, którzy pytaj o to samo smile.gif


to trzymaj sie tego stylu a nie podawaj gotowe zapytanie:P


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
pianta_d
post 18.01.2007, 17:40:52
Post #9





Grupa: Zarejestrowani
Postów: 176
Pomógł: 18
Dołączył: 5.01.2007

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


Witam

Męczyłem się, męczyłem i nic nie wymęczyłem. Próbowałem na wiele sposobów i za każdym razem wyskakiwał błąd, że coś jet nie tak w lini 1. Poniżej podaję ostatni pomysł jaki męczyłem, ale i tak ...
  1. SELECT SUM(CAST(SUBSTRING_INDEX(zak_MKK,' ',-1)AS ILE)AS UNSIGNED INTEGER)AS ile FROM t0089;


Dodam jeszcze, że w tej kolumnie nie wszystkie pola są wypełnione.
Go to the top of the page
+Quote Post
mike
post 18.01.2007, 18:29:45
Post #10





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Zapytanie:
  1. SELECT SUM(CAST(SUBSTRING_INDEX(`column`,' ',-1)AS UNSIGNED))AS ile FROM `table`

Sprawdzone na takiej tabeli:
  1. CREATE TABLE `table` (
  2. `id` INT( 2 ) NOT NULL AUTO_INCREMENT ,
  3. `column` VARCHAR( 100 ) NOT NULL ,
  4. PRIMARY KEY ( `id` )
  5. ) TYPE = innodb CHARACTER SET utf8 COLLATE utf8_general_ci;
z takimi danymi
  1. INSERT INTO TABLE (id, COLUMN) VALUES ('1', 'mike_mech 200');
  2. INSERT INTO TABLE (id, COLUMN) VALUES ('2', 'pianta_d 300');
  3. INSERT INTO TABLE (id, COLUMN) VALUES ('3', 'Kowalski 100');
dało wynik
Cytat
600
Go to the top of the page
+Quote Post
pianta_d
post 18.01.2007, 18:46:40
Post #11





Grupa: Zarejestrowani
Postów: 176
Pomógł: 18
Dołączył: 5.01.2007

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


  1. CREATE TABLE `table` (
  2. `id` INT( 2 ) NOT NULL AUTO_INCREMENT ,
  3. `column` VARCHAR( 100 ) NOT NULL ,
  4. PRIMARY KEY ( `id` )
  5. ) TYPE = innodb CHARACTER SET utf8 COLLATE utf8_general_ci

Probowalem utworzyc ta tabele, ale wywala mi blad
  1. 1064 - Something IS wrong IN your syntax obok 'CHARAKTER SET utf8 COLLATE utf8_general_ci' w lini 5

Jednym z próbowanych pomysłów był Twój, ale nie chciał pójść.
Skopiowałem Twój przerobilem go na swoja tabele i pole, ale wywala błąd
Go to the top of the page
+Quote Post
mike
post 18.01.2007, 18:48:21
Post #12





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


CHARAKTER != CHARACTER

Niedokładnie skopiowałeś.
Go to the top of the page
+Quote Post
pianta_d
post 18.01.2007, 19:00:49
Post #13





Grupa: Zarejestrowani
Postów: 176
Pomógł: 18
Dołączył: 5.01.2007

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


Przepraszam, źle przepisałem komunikat błędu (rozmawiałem z żoną angrysmiley.gif ). W poleceniu jest
  1. ... CHARACTER SET ...
tak jak pisałeś
Go to the top of the page
+Quote Post
mike
post 18.01.2007, 19:22:49
Post #14





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(pianta_d @ 18.01.2007, 19:00:49 ) *
Przepraszam, źle przepisałem komunikat błędu (rozmawiałem z żoną angrysmiley.gif ).
Nic się nie stało smile.gif
Pozdrowienie dla żony.
Cytat(pianta_d @ 18.01.2007, 19:00:49 ) *
W poleceniu jest
  1. ... CHARACTER SET ...
tak jak pisałeś
Prawdopodobnie mamy inne wersje MySQL'a. Ja mam 5.0 a Ty 4.1. Wcześniej tabele się tworzyło inaczej i stąd jest problem.
Ogólnie meritum sprawy załatwi zapytanie:
  1. ELECT SUM(CAST(SUBSTRING_INDEX(`column`,' ',-1)AS UNSIGNED))AS ile FROM `table`
ono działa na pewno.
Ale jeśli chcesz sprawdzić u siebie to tabele możesz utworzyć tak:
  1. CREATE TABLE `table` (
  2. `id` INT( 2 ) NOT NULL AUTO_INCREMENT ,
  3. `column` VARCHAR( 100 ) NOT NULL ,
  4. PRIMARY KEY ( `id` )
  5. );
Powinno działać, choć nie pamiętam jak to było w 4.1
Go to the top of the page
+Quote Post
pianta_d
post 18.01.2007, 20:32:08
Post #15





Grupa: Zarejestrowani
Postów: 176
Pomógł: 18
Dołączył: 5.01.2007

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


Dziękuję bardzo za pomoc, ale niestety nie działa. Jednak przy okazji dowiedziałem się Rozdzielić zawartość rekordu. Dzięki za pozdrowienia dla żony, wzajemnie pozdrawiam śliczną Panią o "okienka" biggrin.gif

Ale mam inny pomysł. Moze dorobić jedną kolumę i skopiować tem wartość SUBSTRING_INDEX.
Jeśli da się to zrobić to proszę o pomoc. Mam nóż na gardle. Muszę to mieć jutro w pracy.

Dzięki z góry
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: 13.06.2025 - 05:14