- $sHouseNumberRegex = '\\\\m'.$this->sHouseNumber.'\\\\M';
- $aOrder[] = ' (';
- $aOrder[0] .= 'EXISTS(';
- $aOrder[0] .= ' SELECT place_id';
- $aOrder[0] .= ' FROM placex';
- $aOrder[0] .= ' WHERE parent_place_id = search_name.place_id';
- $aOrder[0] .= " AND housenumber ~* E'".$sHouseNumberRegex."'";
- $aOrder[0] .= ' LIMIT 1';
- $aOrder[0] .= ') ';
- // also housenumbers from interpolation lines table are needed
- if (preg_match('/[0-9]+/', $this->sHouseNumber)) {
- $iHouseNumber = intval($this->sHouseNumber);
- $aOrder[0] .= 'OR EXISTS(';
- $aOrder[0] .= ' SELECT place_id ';
- $aOrder[0] .= ' FROM location_property_osmline ';
- $aOrder[0] .= ' WHERE parent_place_id = search_name.place_id';
- $aOrder[0] .= ' AND startnumber is not NULL';
- $aOrder[0] .= ' AND '.$iHouseNumber.'>=startnumber ';
- $aOrder[0] .= ' AND '.$iHouseNumber.'<=endnumber ';
- $aOrder[0] .= ' LIMIT 1';
- $aOrder[0] .= ')';
+ $sHouseNumberRegex = $oDB->getDBQuoted('\\\\m'.$this->sHouseNumber.'\\\\M');
+
+ // Housenumbers on streets and places.
+ $sChildHnr = 'SELECT * FROM placex WHERE parent_place_id = search_name.place_id';
+ $sChildHnr .= ' AND housenumber ~* E'.$sHouseNumberRegex;
+ // Interpolations on streets and places.
+ if (preg_match('/^[0-9]+$/', $this->sHouseNumber)) {
+ $sIpolHnr = 'WHERE parent_place_id = search_name.place_id ';
+ $sIpolHnr .= ' AND startnumber is not NULL';
+ $sIpolHnr .= ' AND '.$this->sHouseNumber.'>=startnumber ';
+ $sIpolHnr .= ' AND '.$this->sHouseNumber.'<=endnumber ';
+ } else {
+ $sIpolHnr = false;