Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [sql][php] Rozdzielenie zawartości rekordu
Forum PHP.pl > Forum > Przedszkole
pianta_d
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.
AxZx
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.
pianta_d
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??
mike
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
pianta_d
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??
mike
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
pianta_d
OK, dzieki. pomecze sie i dam odpowiedz jutro.

pzdr
AxZx
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
pianta_d
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.
mike
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
pianta_d
  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
mike
CHARAKTER != CHARACTER

Niedokładnie skopiowałeś.
pianta_d
Przepraszam, źle przepisałem komunikat błędu (rozmawiałem z żoną angrysmiley.gif ). W poleceniu jest
  1. ... CHARACTER SET ...
tak jak pisałeś
mike
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
pianta_d
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
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.