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

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ć.

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

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

  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.

Tylko nie rozumiem po co ta tabela dowiazania ?

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