Jak sprawdzić czy dany rekord w bazie nie jest powiązany z


(tomi001) #1

Mam taki problem mam tabelę w której są dolegliwości

1 obniżony nastrój 50 1

2 anhedonia 50 1

3 anhedonia 70 2

4 apatia 50 2

5 apatia 80 1

6 napad padaczkowy 50 10

7 napad padaczkowy 80 12

8 napad padaczkowy 50 11

9 biegunka 90 13

10 bóle mięśniowe 70 13

11 ziewanie 75 13

Pierwsze pole to id drugie pole to dolegliwość 3 pole nie ważne, a 4 pole to id_choroby 2 tabela wygląda tak 1 depresja 50 2 choroba 2 50 3 choroba 3 50 4 choroba 4 50 5 choroba 5 50 6 choroba 6 50 1 pole to id choroby 2 pole to nazwa choroby I przykładowo użytkownik wybiera sobie z formularza dolegliwości Jak już wybierze te dolegliwości to tabela z tymi dolegliwościami będzie wyglądać tak

id_choroby nazwa dolegliwości

13 biegunka

14 biegunka

13 wymioty

13 dysforia

1 anhedonia

2 anhedonia

I moje pytanie jest takie jak skonstruować pętle, która by wychwytywała np. takie wyjątki, że np. dana dolegliwość nie należy do takiej choroby Bo chodzi mi o to, że np. dolegliwość anhedonia nie jest objawem choroby o id_choroby 13 i jak to zrobić. -- Dodane 03.10.2013 (Cz) 10:58 --

function sprawdz_bledy() {

  $tablica = $this->tablica;

  $n = count($tablica);


    for ($i=0;$tablica[$i][0] != "";$i++) {

      for ($j = 0;$tablica[$j][0] != "";$j++) {

      $b = $tablica[$j][0];

      $sprawdz = mysql_query("select nazwa,id_choroby from dolegliwosci where nazwa = '$b' ");

      $sprawdz = mysql_fetch_array($sprawdz);

      $sprawdz2 = mysql_query("select nazwa,id from choroby where id = '$b' ");

      $sprawdz2 = mysql_fetch_array($sprawdz2);

      print $tablica[$j][0];

	  if ($sprawdz2[0] != "") print "";


      }

      print "
";



    }






  }[/code]

Napisałem taką funkcje, ale coś nie chce działać.


(Grzelix) #2

Masz trochę nie czytelny schemat bazy danych,

to powinno zadziałać (ewentualnie popraw nazwy pól).

SELECT ch.nazwa , d.nazwa FROM chroby ch, dolegliwosci d Where ch.id_choroby != d.id_choroby

W wyniku powinienś dostać pary typu:

Choroba A, Dolegliwość A gdzie Dolegliwość A nie jest objawem Choroby A.

Jeśli chcesz do konkretnej choroby dodaj Id choroby w warunku where


(tomi001) #3

Z tym problemem już sobie poradziłem na 90 %, ale nie użyłem żadnych kluczy w SQL ja ty to masz.


([alex]) #4
  1. Zmień schemat:

    create table choroba ( choroba_Id int auto_increment primary key, choroba_Nazwa char(128) );

    create table dolegliwosc ( dolegliwosc_Id int auto_increment primary key, dolegliwosc_Nazwa char(128) );

    create table powiazania ( choroba_Id int not null, dolegliwosc_Id int not null );

  2. Wtedy wybierasz listę z tabeli dolegliwosc (bez choroba_id) 3. Zapytanie może wyglądać następująco:

    select C.choroba_Nazwa as Nazwa, count(P.dolegliwosc_Id) as Ile

    from choroba C, powiazania P

    where P.dolegliwosc_Id in (1,7,23) and C.choroba_Id=P.choroba_Id

    group by P.choroba_Id

    having Ile=3

Gdzie w nawiasach okrągłych po in wstawiasz listę dolegliwosc_Id

zaś na samym końcu zapytania wstawiasz ilość tych podanych dolegliwości.

Da się to zaadaptować nawet do twojego układu tablic, tyle że będzie nieco pokręcone.


(tomi001) #5

Tylko nie rozumiem po co ta tabela dowiazania ?


(etam) #6

Po to, że masz związek wiele chorób do wiele dolegliwości. Podstawy baz danych się kłaniają. http://wazniak.mimuw.edu.pl/index.php?t ... .1-Slajd14