Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [MySQL] suma x
dentopolis
post 14.03.2017, 19:51:19
Post #1





Grupa: Zarejestrowani
Postów: 252
Pomógł: 0
Dołączył: 14.08.2016

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


chciałbym poznać ile razy w wierszu tabeli występuje np.litera x lub c lub w.
czyli uzyskać np.6

obecnie mam taki kod:
  1. SELECT SUM('18'='w'+'17'='w'+'16'='w'+'15'='w'+'14'='w'+'13'='w'+'12'='w'+'11'='w'+'21'='w'+'22'='w'+'23'='w'+'24'='w'+'25'='w'+'26'='w'+'27'='w'+'28'='w'+'48'='w'+'47'='w'+'46'='w'+'45'='w'+'44'='w'+'44'='w'+'43'='w'+'42'='w'+'41'='w'+'31'='w'+'32'='w'+'33'='w'+'34'='w'+'35'='w'+'36'='w'+'37'='w'+'38'='w') AS liczbaw FROM badania WHERE pacjent=$id




Ten post edytował dentopolis 14.03.2017, 19:53:04
Go to the top of the page
+Quote Post
trueblue
post 14.03.2017, 20:00:05
Post #2





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Nazw kolumn nie umieszcza się w pojedynczych apostrofach.


--------------------
Go to the top of the page
+Quote Post
dentopolis
post 14.03.2017, 21:06:02
Post #3





Grupa: Zarejestrowani
Postów: 252
Pomógł: 0
Dołączył: 14.08.2016

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


okay zmieniłem ale wynik się nie zmienił

  1. SELECT SUM(18='w'+17='w'+16='w'+15='w'+14='w'+13='w'+12='w'+11='w'+21='w'+22='w'+23='w'+24='w'+25='w'+26='w'+27='w'+28='w'+48='w'+47='w'+46='w'+45='w'+44='w'+44='w'+43='w'+42='w'+41='w'+31='w'+32='w'+33='w'+34='w'+35='w'+36='w'+37='w'+38='w') AS liczbaw FROM badania
Go to the top of the page
+Quote Post
trueblue
post 14.03.2017, 21:10:28
Post #4





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Nie uważasz, że 18='w', to będzie po prostu porównanie liczby 18 do stringu 'w'?


--------------------
Go to the top of the page
+Quote Post
dentopolis
post 14.03.2017, 21:48:32
Post #5





Grupa: Zarejestrowani
Postów: 252
Pomógł: 0
Dołączył: 14.08.2016

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


więc jak proponujesz?
Go to the top of the page
+Quote Post
trueblue
post 14.03.2017, 22:02:49
Post #6





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


https://dev.mysql.com/doc/refman/5.7/en/identifiers.html


--------------------
Go to the top of the page
+Quote Post
phpion
post 14.03.2017, 22:10:20
Post #7





Grupa: Moderatorzy
Postów: 6 070
Pomógł: 860
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Zacząłbym od poprawnej struktury danych tj. wydzielenia tych śmiesznych kolumn do osobnej tabeli, gdzie miałbyś 3 kolumny: id_badania, ta_dziwna_kolumna, wartość. Wtedy zadanie staje sie trywialne.
Go to the top of the page
+Quote Post
dentopolis
post 14.03.2017, 22:21:33
Post #8





Grupa: Zarejestrowani
Postów: 252
Pomógł: 0
Dołączył: 14.08.2016

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


numery 48,47...to numery zębów a litery to stany zębów (x=brak, c-próchnica;w-wypełnienie)
Go to the top of the page
+Quote Post
Lord
post 14.03.2017, 23:17:15
Post #9





Grupa: Zarejestrowani
Postów: 239
Pomógł: 32
Dołączył: 10.03.2004

Ostrzeżenie: (10%)
X----


Cytat(phpion @ 15.03.2017, 00:10:20 ) *
Zacząłbym od poprawnej struktury danych tj. wydzielenia tych śmiesznych kolumn do osobnej tabeli, gdzie miałbyś 3 kolumny: id_badania, ta_dziwna_kolumna, wartość. Wtedy zadanie staje sie trywialne.



Cytat(dentopolis @ 15.03.2017, 00:21:33 ) *
numery 48,47...to numery zębów a litery to stany zębów (x=brak, c-próchnica;w-wypełnienie)

Zrób jak ci kolega powiedział to bedzie łatwe wtedy :]

select sum('id') form zeby where id_badania = X and id_pacjenta = Y and stan = "w" i pewnie jeszcze ostatnia data czy co tam ci potrzebne

Ten post edytował Lord 14.03.2017, 23:20:30
Go to the top of the page
+Quote Post
dentopolis
post 15.03.2017, 00:09:45
Post #10





Grupa: Zarejestrowani
Postów: 252
Pomógł: 0
Dołączył: 14.08.2016

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


ale "stan" muszę przypisać do 36 zębów (kolumn). jest inna opcja?
Go to the top of the page
+Quote Post
phpion
post 15.03.2017, 07:06:47
Post #11





Grupa: Moderatorzy
Postów: 6 070
Pomógł: 860
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(dentopolis @ 15.03.2017, 00:09:45 ) *
ale "stan" muszę przypisać do 36 zębów (kolumn). jest inna opcja?

Nie kolumn, a wierszy i to u siebie powinieneś poprawić.
Go to the top of the page
+Quote Post
dentopolis
post 15.03.2017, 07:58:49
Post #12





Grupa: Zarejestrowani
Postów: 252
Pomógł: 0
Dołączył: 14.08.2016

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


próbuję to zrobić w php w ten sposób:

  1. if ($row['47'] == 'w') {
  2. $rightuppersevenw=1;
  3. }
  4. else {
  5.  
  6. }
  7. if ($row['48'] == 'w') {
  8. $rightuppereightw=1;
  9. }
  10. else {
  11.  
  12. }


ale potem gdy próbuję to dodać to mam 0:

$liczbaw=$rightuppersevenw+$rightuppereightw;




z kolei jeśli zamienię operator == na = to liczy mi także komórki z wartościami innymi niż w np.'c'

Ten post edytował dentopolis 15.03.2017, 08:03:38
Go to the top of the page
+Quote Post
borabora
post 15.03.2017, 11:58:52
Post #13





Grupa: Zarejestrowani
Postów: 116
Pomógł: 33
Dołączył: 8.09.2014

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


wygodniej zapytaniem. zmień strukturę tabeli tak jak mówił phpion id_badania, numer_zeba, stan.

  1. SELECT stan, count(1) AS ile FROM tabela WHERE id_badania=5 GROUP BY stan

wyjdzie ile wypełnien, próchnicy, braków

ps. to coś komercyjneo?

Ten post edytował borabora 15.03.2017, 12:01:57
Go to the top of the page
+Quote Post
dentopolis
post 15.03.2017, 12:53:07
Post #14





Grupa: Zarejestrowani
Postów: 252
Pomógł: 0
Dołączył: 14.08.2016

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


to skrypt do mojego gabinetu. czyli baza ma wyglądać tak?
id 18 x
id 17 c
id 16 c
id 15 w
itd?
jeszcze po id kolumna idpacjenta
Go to the top of the page
+Quote Post
Lord
post 15.03.2017, 14:25:16
Post #15





Grupa: Zarejestrowani
Postów: 239
Pomógł: 32
Dołączył: 10.03.2004

Ostrzeżenie: (10%)
X----


1 tabela
id_pacjenta, nazwisko .... inne dane
2 tabela
id_badania, id_pacjenta, data_badania ..... inne dane
3 tabela
id, id_pacjenta, id_badania, nr_zeba, stan

cos takiego i wtedy masz duzo prościej pobrac te dane co sa ci potrzebne
Go to the top of the page
+Quote Post
viking
post 15.03.2017, 14:40:58
Post #16





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


W 3 tabeli id_pacjenta jest już podane 2 tabeli po której wiążesz. Pamiętaj też że w mysql masz pole enum które mogłoby pasować do przechowywania stanu.


--------------------
Go to the top of the page
+Quote Post
dentopolis
post 15.03.2017, 15:12:04
Post #17





Grupa: Zarejestrowani
Postów: 252
Pomógł: 0
Dołączył: 14.08.2016

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


tylko że przy takim rozwiązaniu przy każdym badaniu będzie trzeba zapisać do bazy 36 wersów zamiast 1

a co jest nie tak w poście nr 12?

Ten post edytował dentopolis 15.03.2017, 15:12:52
Go to the top of the page
+Quote Post
viking
post 15.03.2017, 15:14:41
Post #18





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Witaj w świecie relacyjnych baz danych smile.gif Tak się to robi. I przykładowo mógłbyś teraz zapisywać dodatkowe informacje do każdego zęba. Niemożliwe przy oryginalnym kodzie.


--------------------
Go to the top of the page
+Quote Post
dentopolis
post 15.03.2017, 15:44:21
Post #19





Grupa: Zarejestrowani
Postów: 252
Pomógł: 0
Dołączył: 14.08.2016

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


okay, zrobiłem jak opisaliście, ale jak teraz przypisać wartość komórki do zmiennej żeby uzyskać:
$rightuppereight = 'x';

Go to the top of the page
+Quote Post
Lord
post 15.03.2017, 16:24:10
Post #20





Grupa: Zarejestrowani
Postów: 239
Pomógł: 32
Dołączył: 10.03.2004

Ostrzeżenie: (10%)
X----


$rightuppereight rozumiem ze to jest górna prawa 8 to pewnie to jest jakis numerek w bazie np 18 czy cos ? kolejna sprawa to wydaje mi sie ze nie powinno byc tam pacjant, a idb bo tak to bedziesz mial tylko ostatni/aktualny stan pacjenta, a nie wyniki poprzednich badan.

kolejna sprawa czemu chcesz zapisac to w formie $rightuppereight a nie w jako tabele aktualnego stanu
$ostatniebadanie['id_zeba'] = x

mozesz wtedy pobrac dane:

  1. SELECT stan,zab FROM zeby WHERE pacjent = 24;


i potem masz
  1. foreach($wynik as $v){
  2. $ostatniebadanie[$v['zab']] = $v['stan'];
  3. }


Ten post edytował Lord 15.03.2017, 16:24:32
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 25.04.2024 - 13:46