diff options
| author | fisharebest <fisharebest@gmail.com> | 2013-07-28 19:42:58 +0000 |
|---|---|---|
| committer | fisharebest <fisharebest@gmail.com> | 2013-07-28 19:42:58 +0000 |
| commit | 27b0762fd3759fa7eba6991cb7e99d77fd3efd4c (patch) | |
| tree | 4ae9428143f710b91b2fda28902ad08b5309c1b5 /library/WT/Controller | |
| parent | dbf5da80f3d00d69705aa5fd306f01107920b849 (diff) | |
| download | webtrees-27b0762fd3759fa7eba6991cb7e99d77fd3efd4c.tar.gz webtrees-27b0762fd3759fa7eba6991cb7e99d77fd3efd4c.tar.bz2 webtrees-27b0762fd3759fa7eba6991cb7e99d77fd3efd4c.zip | |
#1195554 - Advance Search with PLAC
Diffstat (limited to 'library/WT/Controller')
| -rw-r--r-- | library/WT/Controller/AdvancedSearch.php | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/library/WT/Controller/AdvancedSearch.php b/library/WT/Controller/AdvancedSearch.php index 586db82939..0ae25d5a53 100644 --- a/library/WT/Controller/AdvancedSearch.php +++ b/library/WT/Controller/AdvancedSearch.php @@ -268,13 +268,34 @@ class WT_Controller_AdvancedSearch extends WT_Controller_Search { } if ($indi_plac) { $sql.=" JOIN `##placelinks` i_pl ON (i_pl.pl_file=ind.i_file AND i_pl.pl_gid =ind.i_id)"; - $sql.=" JOIN `##places` i_p ON (i_p.p_file =ind.i_file AND i_pl.pl_p_id=i_p.p_id)"; + $sql.=" JOIN (". + "SELECT CONCAT_WS(', ', p1.p_place, p2.p_place, p3.p_place, p4.p_place, p5.p_place, p6.p_place, p7.p_place, p8.p_place, p9.p_place) AS place, p1.p_id AS id, p1.p_file AS file". + " FROM `##places` AS p1". + " LEFT JOIN `##places` AS p2 ON (p1.p_parent_id=p2.p_id)". + " LEFT JOIN `##places` AS p3 ON (p2.p_parent_id=p3.p_id)". + " LEFT JOIN `##places` AS p4 ON (p3.p_parent_id=p4.p_id)". + " LEFT JOIN `##places` AS p5 ON (p4.p_parent_id=p5.p_id)". + " LEFT JOIN `##places` AS p6 ON (p5.p_parent_id=p6.p_id)". + " LEFT JOIN `##places` AS p7 ON (p6.p_parent_id=p7.p_id)". + " LEFT JOIN `##places` AS p8 ON (p7.p_parent_id=p8.p_id)". + " LEFT JOIN `##places` AS p9 ON (p8.p_parent_id=p9.p_id)". + ") AS i_p ON (i_p.file =ind.i_file AND i_pl.pl_p_id= i_p.id)"; } if ($fam_plac) { $sql.=" JOIN `##placelinks` f_pl ON (f_pl.pl_file=ind.i_file AND f_pl.pl_gid =fam.f_id)"; - $sql.=" JOIN `##places` f_p ON (f_p.p_file =ind.i_file AND f_pl.pl_p_id=f_p.p_id)"; + $sql.=" JOIN (". + "SELECT CONCAT_WS(', ', p1.p_place, p2.p_place, p3.p_place, p4.p_place, p5.p_place, p6.p_place, p7.p_place, p8.p_place, p9.p_place) AS place, p1.p_id AS id, p1.p_file AS file". + " FROM `##places` AS p1". + " LEFT JOIN `##places` AS p2 ON (p1.p_parent_id=p2.p_id)". + " LEFT JOIN `##places` AS p3 ON (p2.p_parent_id=p3.p_id)". + " LEFT JOIN `##places` AS p4 ON (p3.p_parent_id=p4.p_id)". + " LEFT JOIN `##places` AS p5 ON (p4.p_parent_id=p5.p_id)". + " LEFT JOIN `##places` AS p6 ON (p5.p_parent_id=p6.p_id)". + " LEFT JOIN `##places` AS p7 ON (p6.p_parent_id=p7.p_id)". + " LEFT JOIN `##places` AS p8 ON (p7.p_parent_id=p8.p_id)". + " LEFT JOIN `##places` AS p9 ON (p8.p_parent_id=p9.p_id)". + ") AS f_p ON (f_p.file =ind.i_file AND f_pl.pl_p_id= f_p.id)"; } - // Add the where clause $sql.=" WHERE ind.i_file=?"; $bind[]=WT_GED_ID; @@ -400,12 +421,13 @@ class WT_Controller_AdvancedSearch extends WT_Controller_Search { } elseif ($parts[1]=='PLAC') { // *:PLAC // SQL can only link a place to a person/family, not to an event. - $sql.=" AND i_p.p_place=?"; + $sql.=" AND i_p.place LIKE CONCAT('%', ?, '%')"; + //$sql.=" AND i_p.p_place=?"; $bind[]=$value; } elseif ($parts[0]=='FAMS' && $parts[2]=='PLAC') { // FAMS:*:PLAC // SQL can only link a place to a person/family, not to an event. - $sql.=" AND f_p.p_place=?"; + $sql.=" AND f_p.place LIKE CONCAT('%', ?, '%')"; $bind[]=$value; } elseif ($parts[0]=='FAMC' && $parts[2]=='NAME') { $table=$parts[1]=='HUSB' ? 'f_n' : 'm_n'; |
