Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Left Join i ostatnio dodany
Forum PHP.pl > Forum > Bazy danych > MySQL
krzyszbi
witam

mam następujący problem ale może najpierw obrazek



jak widać wyżej mam 4 tabele pod uwagą obecnie biorę 3 a mianowice

chcę w jednym zapytaniu pobrać listę informacji a dodatkowo do tej listy dołączyć:
- ilość komentarzy ( to mam działa )
- tytuł ostatnio dodanego komentarza jak i jego autora ( i tu nie wiem jak to zapisac )

obecnie mam takie zapytanie a właściwie to co mi Zend_Db_Table generuje
  1. <?php
  2. [/php]$select = $this->select();
  3. $select->setIntegrityCheck(false);
  4. $select->from(array('i' => 'information'),
  5. array('idinformation', 'idusersadd', 'idproject', 'name', 'version', 'datastart', 'lastedit'));
  6.  
  7. $select->joinLeft(array('ic' => 'informationcomment'),
  8. 'i.idinformation = ic.idinformation',
  9. array('ic.idinformationcomment','commentsdate'=>'ic.date', 'comments'=>new Zend_Db_Expr('COUNT(ic.idinformationcomment)'))
  10. );
  11. $select->joinLeft(array('u' => 'users'),
  12. 'u.idusers = ic.idusers',
  13. array('commentsusers'=>'u.name')
  14. );
  15. $select->order('ic.idinformationcomment DESC');
  16. $select->group('i.idinformation');
  17. [php]
  18. ?>


  1. SELECT
  2. `i`.`idinformation`, `i`.`idusersadd`, `i`.`idproject`, `i`.`name`, `i`.`version`, `i`.`datastart`, `i`.`lastedit`,
  3. `ic`.`idinformationcomment`, `ic`.`date` AS `commentsdate`, COUNT(ic.idinformationcomment) AS `comments`,
  4. `u`.`name` AS `commentsusers`
  5. FROM `information` AS `i`
  6. LEFT JOIN `informationcomment` AS `ic` ON i.idinformation = ic.idinformation
  7. LEFT JOIN `users` AS `u` ON u.idusers = ic.idusers
  8. GROUP BY `i`.`idinformation`
  9. ORDER BY `ic`.`idinformationcomment` DESC


komentarz mi dołacza ale zawsze pierwszy próbowałem z sortowaniem z max a wybieraniu największego kometarza ale nic nie chce działać tak jak myśle ze ma działać

więc jak do tego się dobrać aby było optymalnie

P.S. mam tu relacje 1:1 między informacjami a userami (autor, ostatnio edytował pewnie też będzie tak) i komentarz informacji a user i czy to jest dobrze bo mi się wydaje ze tak usera mam raz zapisanego i nigdzie nie powtarzam
JoShiMa
Może jakiś warunek WHERE...
krzyszbi
niby można dać w warunku podzapytanie ale wtedy mi policzy ze tylko jeden komentarz do informacji mam ( warunek ograniczy ) wiec nie bardzo mi się to uśmiecha

  1. SELECT `i`.`idinformation` , `i`.`idusersadd` , `i`.`idproject` , `i`.`name` , `i`.`version` , `i`.`datastart` , `i`.`lastedit` , `ic`.`idinformationcomment` , `ic`.`date` AS `commentsdate` , COUNT( ic.idinformationcomment ) AS `comments` , `u`.`name` AS `commentsusers`
  2. FROM `information` AS `i`
  3. LEFT JOIN `informationcomment` AS `ic` ON i.idinformation = ic.idinformation
  4. LEFT JOIN `users` AS `u` ON u.idusers = ic.idusers
  5. WHERE (
  6. ic.idinformationcomment = (
  7. SELECT MAX( idinformationcomment )
  8. FROM informationcomment )
  9. )
  10. GROUP BY `i`.`idinformation`
  11. ORDER BY `ic`.`idinformationcomment` DESC


coś takiego mam ale to jest ten problem co opisałem jak użyje warunki COUNT( ic.idinformationcomment ) AS `comments` zwróci zawsze 1 wiec pewnie nie tędy droga
więc którędy questionmark.gif
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.