Czy da to się zrobić za pomocą jednego zapytania

0

Mam taki problem mam 4 tabele już pokazuje ich strukturę

tabela produkty

id  nazwa   id_users    id_substancji   color   ile_procent     rodzaj_porcji   cena    za_Ile

Tabela spozycie

id  porcja  id_users    data    id_produktu     cena    czy_dwa

Tabela substancje

id  nazwa   id_users    id_grupy    rownowaznik     color

I tabela przekierowanie substancji


id  id_substancji   id_produktu

I teraz chodzi o to, żeby wybrać z tabeli spożycie np z określonego dnia np data1 2018-01-30 04:00:00 data 2 2018-02-01 04:00:00
I też chodzi o to, że np takie dane
jak są w tabeli

lek1(substancja1,substancja2) dawka 10 mg godz jakaś atam
lek2(substancja3)                   dawka 20 mg
lek3 (substancja3)                  dawka 10 mg
lek4(substancja4)                    dawka 15 mg
lek4(substancja4)                   dawka 20 mg 

I teraz chcę, żeby te dane znalazły się w takiej postaci
lek1 dawka 10 mg
substancja3 dawka 30 mg
substancja4 dawka 35 mg

Chodzi o to, że sumował powtarzające się produkty i je wypisał, ale wypisał substancja jaka w nich wchodzi natomiast jak produkt ma kilka substancji to, żeby wypisał nazwę produktu.

0

Bardzo ciężko zrozumieć Twój post i Twoje pytanie. Proszę napisz dokładnie jakie dane, z których kolumn, połączonych z którymi tabelami na wyjściu chciałbyś uzyskać.

PS: Ja po 2 minutach zastanawiania się, domyślam że chciałbyś pokazać które substancje się pokrywają w jakimś przedziale produktów? Strzał. Opisz dokładnie jakie chcesz wyjściowe dane.

0

Chodzi o to, że np są wyrzucane poszczególne substancje nazwa produktu czyli np apap nazwa substacji czynnej czyli np. paracetamol ale mogą się też zdarzyć leki które mają w sobie więcej niż jedna substancja czynna np antidol który zawiera kodeine i paracetamol i w tym całym procederze mogą się powtarzać produkty i to ma je zgrupować, ale mogą się też zdarzyć substancje które mają w swoim składzie ta samą substancje czynnną ale mają inną nazwę to w tym przypadku chce żeby wziął wszystkie wspólne produkty i wspólne substancje czynne i napisał że np paracetamolu wziąłem dzisiaj (float) a w przypadku kiedy produkt ma więcej niż jedną substancje czynną to żeby jak będzie wypisywał pogrupowane substancje to, żeby pogrupował na nazwie produktu nie po nazwie substancji czynnje.

2

Odpowiadam na pytanie - tak, da to się zrobić za pomocą jednego zapytania.

0

Zrobiłem to

public function wybierz_wszystkie_substancje($data1,$data2) {
  print $data2;
  //$wybierz_leki = DB::select("select sum(porcja) as porcja,data,spozycie.id as id,spozycie.cena as cena,produkty.id as id_produktu,substancje.id as id_substancji,produkty.rodzaj_porcji as rodzaj,produkty.color as color,produkty.nazwa as nazwa,substancje.nazwa as nazwa2 from spozycie  inner JOIN produkty on produkty.id = spozycie.id_produktu inner join substancje on produkty.id_substancji = substancje.id  where data < '$data2'  and data > '$data1' group by produkty.id_substancji order by data ");
  $wybierz_leki = DB::select ("select sum(porcja) as porcja,spozycie.id_produktu,produkty.nazwa,rodzaj_porcji as rodzaj,substancje.nazwa as nazwa2,produkty.id_substancji as id_substancji from spozycie, produkty,substancje,przekierowanie_substancji  where data < '$data2' and data > '$data1' and przekierowanie_substancji.id_substancji = substancje.id and spozycie.id_produktu = produkty.id group by id_produktu ");
  $tablica = array();
  $i = 0;
  $z = 0;
  $tablica_id = array();
  foreach ($wybierz_leki as $wybierze_leki2) {

  //   $wybierze_substancje = DB::select("select id_substancji as id_substancji,id_produktu,substancje.nazwa as substancje,substancje.color as kolor2 from przekierowanie_substancji inner join substancje on substancje.id = przekierowanie_substancji.id_substancji  where przekierowanie_substancji.id_produktu = '" . $wybierze_leki2->id_produktu . "'");
   $wybierze_substancje = DB::select("select id from substancje  where id = '" . $wybierze_leki2->id_substancji . "'");
     $wynik = "";
     $h = 0;

    foreach ($wybierze_substancje as $substancje2) {
      //$wynik .=  $substancje2->substancje;
      print "<font color=yellow>" . $substancje2->id . "</font>";
      //$z++;
      //$h++;
    }

   //print "<font color=red>" . $h . "</font>";
    //print "<font color=red>" . $wybierze_leki2->id_substancji . "</font>";
    if ($h ==  0) {
      $tablica[$i]['nazwa2'] = $wybierze_leki2->nazwa;
    }
    else {
    if ($h > 1) {
      $tablica[$i]['nazwa2'] = $wybierze_leki2->nazwa;
      //print "kupka";
    }
    else {

      $tablica[$i]['nazwa2'] = $wynik;
    }
    }

    switch($wybierze_leki2->rodzaj) {
      case 1:$tablica[$i]['rodzaj'] = "mg";
      break;
      case 2:$tablica[$i]['rodzaj'] = "mililitry";
      break;
      case 3:$tablica[$i]['rodzaj'] = "ilośći";
      break;
      default:$tablica[$i]['rodzaj'] = "mg";//207/208 baclofen 208

    }

    //$tablica[$i]['rodzaj'] = $wybierze_leki2->rodzaj;

    $tablica[$i]['porcja'] = $wybierze_leki2->porcja;
    print $tablica[$i]['nazwa2'] . "<br>";
    ///print $tablica[$i]['nazwa'] . "<br><br>";
    print $tablica[$i]['porcja'] . "<br>";
    $i++;

  }

  return $tablica;
  //print $z;
  //$tablica = $this->sumuj_powtarzajace_sie_rekordy($tablica);
  //foreach ($tablica as $tablica2) {
    //print $tablica2['nazwa2'] . "<br>";
    //print $tablica2['nazwa2'] . "<br>";
    //print $tablica2['porcja'] . "<br><br>";

  //}

}
0

Ja bym zaczął od tego, ze model danych wydaje się błędny..

Po co w produkcie IDSubstancji? Skoro jest to tylko 1 atrybut, a jak sam napisałeś w produkcie może być wiele substancji?

Czym jest "Przekierowanie substancji" ? Jest to jakiś termin farmaceutyczny?

Czym jest "Porcja" w "Spożyciu"? W jakich jednostkach jest wyrażona?

0
yarel napisał(a):

Ja bym zaczął od tego, ze model danych wydaje się błędny..

Po co w produkcie IDSubstancji? Skoro jest to tylko 1 atrybut, a jak sam napisałeś w produkcie może być wiele substancji?
No właśnie dlatego jest przekieroanie_substancji
Czym jest "Przekierowanie substancji" ? Jest to jakiś termin farmaceutyczny?
przekieroanie_substancji to jest to że id substancji należy id_produktu
i przykładowo id_produktu = 25//apa
i przykładowo id_substancji = 56 / paracetamol
id_substancji id_produktu
56 25
Czym jest "Porcja" w "Spożyciu"? W jakich jednostkach jest wyrażona?
porcja to jest dawka leku może być wyrażona w mg mililitracg albo sztuk.

0
Podaj tu w poscie oczekiwany wynik 
Mój oczekiwany wynik to 
Nazwa produktu nazwa substancji dawka ilość wystąpień
apap                  paracetamol         500         2
antidol              paracetamo,kodeina  150       2,2
thicodin             sulwalor,kodeina      150        1,2
lerivon                mianseryna             30         2 //i w  tym przypadku ma pokazać tylko mianserynę
deprexotel           mianseryna            30         2//i w  tym przypadku ma pokazać tylko mianserynę
0

@pol90, czy ty k#@wa normalny jesteś?
Pokaż mi gdzie w tym SQLFiddle występuje w danych "apap" bądź "paracetamol"...

0
pol90 napisał(a):

Czym jest "Przekierowanie substancji" ? Jest to jakiś termin farmaceutyczny?
przekieroanie_substancji to jest to że id substancji należy id_produktu

No to po co ID_Substancji na poziomie produktu, skoro jest w Przekierowaniu?

Czym jest "Porcja" w "Spożyciu"? W jakich jednostkach jest wyrażona?
porcja to jest dawka leku może być wyrażona w mg mililitracg albo sztuk.

No dobrze, to jak ktoś spożywa 10ml syropu ibum z ibuprofenem i 1 sztukę (kapsułkę) ibumu forte z ibuprofenem, to że niby czego się spodziewasz jako spożycia substancji w danym okresie? Kto ma wiedzieć w czym wyrażona jest ta dawka?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0