Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [MySQL] suma x
dentopolis
post
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


(IMG:http://dentopolis.org/sql.jpg)

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





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
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
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
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
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
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
Post #6





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
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
Post #7





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
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
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
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
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
Post #11





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
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
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
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
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
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
Post #16





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
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
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
Post #18





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Witaj w świecie relacyjnych baz danych (IMG:style_emoticons/default/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
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';

(IMG:http://www.dentopolis.org/sql2.jpg)
Go to the top of the page
+Quote Post
Lord
post
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
dentopolis
post
Post #21





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

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


dzięki Lord za pomoc,ale czy mógłbym Cię prosić o podanie jak to ugryźć tym sposobem który mam obecnie? tzn
jak wrzucić dane do zmiennych (odpowiadają numerom zębów):
$rightuppereight = 'x';
$rightupperseven = 'c';
itd
Go to the top of the page
+Quote Post
viking
post
Post #22





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


W ostateczności możesz ponownie przepisać tablicę którą podal lord. Tylko po co? Możesz napisać więcej co chcesz osiągnąć? To jakieś wyświetlanie czy może przeliczanie wartości?
Go to the top of the page
+Quote Post
dentopolis
post
Post #23





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

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


chciałbym w komórkach tabeli (pierwszym wierszu) wypisać stan zęba (x,c lub w).domyślnie pole ma być puste i wtedy wyświetla się ząb biały.gdy wartość jest x obrazka nie ma (brak zęba), gdy c-obrazek jest czerwony (do leczenia), gdy w-obrazek jest zielony (wypełnienie).
oprócz tego chcę potem policzyć ile jest usuniętych ile do leczenia, ile wypełnionych.

wcześniej potrafiłem wypisać wartości (stany zębów) mając dane w jednym wersie, ale nie potrafiłem ich sumować. a teraz odwrotnie.

(IMG:http://www.dentopolis.org/sql3.jpg)
Go to the top of the page
+Quote Post
viking
post
Post #24





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Kod który podał Ci Lord dokładnie robi to co chcesz. Iteruje po wszystkich zębach danego pacjenta. Możesz teraz stworzyć dodatkowe zmienne przed pętla i później warunkami if ($v[´stan´] === 'x') zwiększ licznik itd.
Go to the top of the page
+Quote Post
dentopolis
post
Post #25





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

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


okay, ale jak ten kod powinien wyglądać? chociaż jeden przykład byłby pomocny:

  1. $sqldiagram = "SELECT stan,zab FROM badania WHERE pacjent=$id";
  2. $resultdiagram = $conn->query($sqldiagram);
  3.  
  4.  
  5. if ($resultdiagram->num_rows > 0) {
  6.  
  7. while($row = $resultdiagram->fetch_assoc()) {
  8.  
  9.  
  10. }
  11.  




wyświetlanie obrazków:
  1. $tablica = explode(" ",$rightupperseven);
  2.  
  3. $obrazki = "";
  4. for ($i=0;$i<count($tablica);$i++){
  5.  
  6. switch ($tablica[$i]) {
  7. case 'x':
  8. $obrazki = $obrazki."";
  9. break;
  10.  
  11. case 'c':
  12. $obrazki = $obrazki."<img src='gfx/c.png' style='width:50px;'>";
  13. break;
  14.  
  15. case 'w':
  16. $obrazki = $obrazki."<img src='gfx/w.png' style='width:50px;'>";
  17. break;
  18.  
  19. case 'o':
  20. $obrazki = $obrazki."<img src='gfx/o.png' style='width:50px;'>";
  21. break;
  22.  
  23. default:
  24. $obrazki = $obrazki."<img src='gfx/tooth.png' width='50px'>" ;
  25. break;
  26. }
  27. }
Go to the top of the page
+Quote Post
Lord
post
Post #26





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

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


Cytat(dentopolis @ 15.03.2017, 20:31:14 ) *
okay, ale jak ten kod powinien wyglądać? chociaż jeden przykład byłby pomocny:

  1. $sqldiagram = "SELECT stan,zab FROM badania WHERE pacjent=$id";
  2. $resultdiagram = $conn->query($sqldiagram);
  3.  
  4.  
  5. if ($resultdiagram->num_rows > 0) {
  6. $obrazki = "";
  7. while($row = $resultdiagram->fetch_assoc()) {
  8. switch ($row['stan']) {
  9. case 'x':
  10. $obrazki = $obrazki."";
  11. break;
  12.  
  13. case 'c':
  14. $obrazki = $obrazki."<img src='gfx/c.png' style='width:50px;'>";
  15. break;
  16.  
  17. case 'w':
  18. $obrazki = $obrazki."<img src='gfx/w.png' style='width:50px;'>";
  19. break;
  20.  
  21. case 'o':
  22. $obrazki = $obrazki."<img src='gfx/o.png' style='width:50px;'>";
  23. break;
  24.  
  25. default:
  26. $obrazki = $obrazki."<img src='gfx/tooth.png' width='50px'>" ;
  27. break;
  28. }
  29. }
  30.  
  31.  
  32.  
  33. }
  34.  

Takie zapis:
$obrazki .= "<img src='gfx/tooth.png' width='50px'>" ;
to to samo co:
$obrazki = $obrazki."<img src='gfx/tooth.png' width='50px'>" ;


Ten post edytował Lord 15.03.2017, 18:52:33
Go to the top of the page
+Quote Post
dentopolis
post
Post #27





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

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


nie wyświetla teraz obrazka

kod źródłowy
Go to the top of the page
+Quote Post
Lord
post
Post #28





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

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


No to musisz szukac (IMG:style_emoticons/default/tongue.gif)

ogólnie to cieżko ten kod sie przegląda (IMG:style_emoticons/default/wink.gif)
Poczytaj trochę o warstwie prezentacji czy jak to sie tam zwie (IMG:style_emoticons/default/smile.gif)

https://pl.wikibooks.org/wiki/PHP/Czym_jest...ablon%C3%B3w%3F
Go to the top of the page
+Quote Post
dentopolis
post
Post #29





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

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


zrobiłem to po swojemu (małą wiedzą php),jest dużo zapytań do bazy ale działa.
(IMG:http://dentopolis.org/sql5.jpg)
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 01:50