Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] Zapytanie z JOIN
Forum PHP.pl > Forum > PHP > Frameworki
orideith
Witam Was.
Mam taki problem a nie wiem jak sobie z nim poradzić.

Mam dwie table jedna nazywa się pacjenci druga wizyty. Potrzebuje zapytania, które wyszuka mi pacjentów, którzy nigdy nie mieli przeprowadzonej wizyty czyli id pacjent nigdy nie zaistniało w tabeli wizyty dla danego nazwiska.

Zapytanie jakie moim zdaniem powinno działać wygląda tak.

  1. function szukajDuplikatu($nazwisko){
  2. $table_pacjent = new pacjent();
  3. $select = $table_pacjent->select();
  4. $select->setIntegrityCheck(false);
  5. $select->from(array('p' => 'pacjent'), array('w.id as idpacjent'));
  6. $select->joinRight(array('w' => 'wizyty'),'p.id != w.idpacjent', array('w.id as idwizyta'));
  7. $select->where('p.nazwisko =?',$nazwisko);
  8. $dane_r = $table_pacjent->fetchAll($select)->toArray();
  9. return $dane_r;
  10. }
  11.  
  12.  
  13. SELECT pacjent.id as idpacjent, wizyty.id as idwizyta FROM pacjent JOIN wizyty
  14. ON pacjent.id != wizyty.idpacjent WHERE pacjent.nazwisko = 'misio'

Niestety zapytanie nie działa. Jak jest tak jak powyżej to wyświetla mi wszystkich pacjentów tak jak by WHERE w ogóle nie było brane pod uwagę i nie wiem czemu tak jest :/.
kosmowariat
$table_pacjent->fetchAll($select)->toArray(); - zastanów się nad tym ;]
i spróbuj tak
  1. $dane_r = $select->query(Zend_Db::FETCH_ASSOC)->fetchAll();
  2. return $dane_r;
orideith
poprawione
  1. function szukajDuplikatu($nazwisko,$dni_wstecz){
  2. //SELECT pacjent.id as idpacjent, wizyty.id as idwizyta FROM pacjent LEFT JOIN wizyty
  3. // ON pacjent.id = wizyty.idpacjent WHERE pacjent.nazwisko = 'misio' AND wizyty.idpacjent IS NULL
  4. $time = mktime(0,0,0,date("m"),date("d")- $dni_wstecz,date("Y"));
  5.  
  6. $table_pacjent = new pacjent();
  7. $select = $table_pacjent->select();
  8. $select->setIntegrityCheck(false);
  9. $select->from(array('p' => 'pacjent'), array('p.nazwisko', 'p.imie','p.pesel','p.ulica','p.kod','p.nrdomu','p.nrmieszkania','p.miasto','p.nazwafirmy as firmapacjent','p.nrnip','p.id as idpacjenta'));
  10. $select->joinLeft(array('w' => 'wizyty'),'w.idpacjent = p.id', array('w.id as idwizyta'));
  11.  
  12. $select->where('p.nazwisko =?',$nazwisko);
  13. $select->where('w.idpacjent IS NULL');
  14. $select->where('p.datawprowadzenia <=?', $time);
  15. $pacjenci_tymczasowi = $table_pacjent->fetchAll($select)->toArray();
  16. return $pacjenci_tymczasowi;
  17.  
  18. }


Może się komuś przyda.

Dziękuje za zainteresowanie.

Pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.