Ignore:
Timestamp:
09/10/14 12:08:18 (10 years ago)
Author:
frank.jaeger
Message:

Umstellung von PostNAS 0.7 auf PostNAS 0.8, ohne Tabelle "alkis_beziehungen".

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/mapbender/http/nav/alkisnav_eig.php

    r315 r330  
    1212        2013-05-14  Hervorhebung aktuelles Objekt, Parameter "gbkennz" auswerten, 
    1313                                Title auch auf Icon, IE zeigt sonst alt= als Title dar. 
     14        2014-09-09  PostNAS 0.8: ohne Tab. "alkis_beziehungen", mehr "endet IS NULL", Spalten varchar statt integer 
    1415*/ 
    1516$cntget = extract($_GET); 
     
    6061function personendaten() { // Adresse und Geburtsdatum der aktuellen Person ausgeben 
    6162        global $gkz, $gemeinde, $epsg, $name, $person, $blattgml, $auskpath; // $debug 
     63 
    6264        $sql ="SELECT p.nachnameoderfirma, p.vorname, p.geburtsdatum, p.namensbestandteil, "; 
    6365        $sql.="a.ort_post, a.postleitzahlpostzustellung AS plz, a.strasse, a.hausnummer "; 
    64         $sql.="FROM ax_person p LEFT JOIN alkis_beziehungen b ON p.gml_id=b.beziehung_von "; 
    65         $sql.="LEFT JOIN ax_anschrift a ON a.gml_id=b.beziehung_zu WHERE p.gml_id= $1 ;";        
     66        $sql.="FROM ax_person p LEFT JOIN ax_anschrift a ON a.gml_id = ANY(p.hat) "; 
     67        $sql.="WHERE p.gml_id= $1 AND p.endet IS NULL AND a.endet IS NULL LIMIT 1;";     
     68        // Es wird nur eine Zeile ausgewertet 
     69 
    6670        $v=array($person); 
    6771        $res=pg_prepare("", $sql); 
     
    126130                $sql.="JOIN gemeinde_person g ON p.gml_id = g.person WHERE "; 
    127131                switch ($gfilter) { 
    128                         case 1: // Einzelwert 
    129                                 $sql.="g.gemeinde=".$gemeinde." AND "; break; 
     132                        case 1: // Einzel 
     133                                $sql.="g.gemeinde='".$gemeinde."' AND "; break; 
    130134                        case 2: // Liste 
    131                                 $sql.="g.gemeinde in (".$gemeinde.") AND "; break; 
     135                                $sql.="g.gemeinde in ('".str_replace(",", "','", $gemeinde)."') AND "; break; 
    132136                } 
    133137        } else { 
     
    189193        // Suche nach GrundbÃŒchern der Person 
    190194        $sql ="SELECT gb.gml_id AS gml_g, gb.buchungsblattnummermitbuchstabenerweiterung as blatt, b.bezirk, b.bezeichnung AS beznam "; 
    191         $sql.="FROM alkis_beziehungen bpn "; 
    192         $sql.="JOIN ax_namensnummer n ON bpn.beziehung_von=n.gml_id "; 
    193         $sql.="JOIN alkis_beziehungen bng ON n.gml_id=bng.beziehung_von "; 
    194         $sql.="JOIN ax_buchungsblatt gb ON bng.beziehung_zu=gb.gml_id "; 
     195        $sql.="FROM ax_namensnummer n JOIN ax_buchungsblatt gb ON n.istbestandteilvon = gb.gml_id "; 
    195196        $sql.="JOIN ax_buchungsblattbezirk b ON gb.land = b.land AND gb.bezirk = b.bezirk "; 
    196         $sql.="WHERE bpn.beziehung_zu= $1 AND bpn.beziehungsart='benennt' AND bng.beziehungsart='istBestandteilVon' "; 
     197        $sql.="WHERE n.bennennt = $1 AND n.endet IS NULL AND gb.endet IS NULL AND b.endet IS NULL "; 
    197198 
    198199        // Parameter $gbkennz, z.B. nach Klick auf Zeile "Bezirk" 
    199200        if ($kennztyp > 1) { // 2=Such Bezirk-Nummer, 3=Such Blatt, 4=Such Buchung BVNR 
    200201                #if ($debug > 0) {echo "<p class='dbg'>Filter Bezirk '".$zgbbez."'<p>";} 
    201                 $sql.="AND b.bezirk = ".$zgbbez." "; 
     202                $sql.="AND b.bezirk='".$zgbbez."' "; 
    202203                $bezirkaktuell = true; 
    203204        } else { 
     
    308309// Stufe 2 und 3 nacheinander verwendet werden. Dies ist wahrscheinlich ÃŒbersichtlicher,  
    309310// weil "ungefiltert" in "2+3" zu lange Listen entstehen wÃŒrden, die durchblÀttert werden mÃŒssen.  
     311 
    310312        global $gkz, $gemeinde, $epsg, $name, $person, $blattgml, $gfilter, $debug, $bltbez, $bltblatt, $bltbvnr, $bltseite, $bltrecht, $kennztyp, $zgbbez; 
    311313        $linelimit=80; // als Limit "Anzahl FlurstÃŒcke" in den beiden folgenden Abfragen 
     
    314316        personendaten(); 
    315317 
    316         // Wenn das Limit ÃŒberschritten wurde: zusÀtzliche Parameter "blt"=BlÀttern 
    317         // $bltbez   = Bezirk-Name   
    318         // $bltblatt = BlattMitBuchstabe 
    319         // $bltbvnr  = lfd.Nr der Buchungsstelle 
    320         // $bltseite = fortlaufende Seiten-Nr 
    321         // $bltrecht = "nur"/"ohne" liefert nur den abgebrochene Teil der Auflistung  
     318        // Wenn das Limit ÃŒberschritten wurde: zusÀtzliche Parameter "blt"=BlÀttern: 
     319        // - $bltbez   = Bezirk-Name   
     320        // - $bltblatt = BlattMitBuchstabe 
     321        // - $bltbvnr  = lfd.Nr der Buchungsstelle 
     322        // - $bltseite = fortlaufende Seiten-Nr 
     323        // - $bltrecht = "nur"/"ohne" liefert nur den abgebrochene Teil der Auflistung  
    322324 
    323325        // SQL-Bausteine vorbereiten 
    324         //  Direkte Buchungen suchen mit:  $sql1 +         $sqla1 + $sql2 
    325         //  SonderfÀlle suchen mit:        $sql1 + $sqlz + $sqla2 + $sql2 
    326  
    327         // Baustein: SQL-Anfang fuer beide Varianten 
     326        //  Direkte Buchungen suchen mit:  $sql1 + $sqla1 + $sql2 
     327        //  SonderfÀlle suchen mit:        $sql1 + $sqla2 + $sql2 
     328 
     329        // Baustein 1: SQL-Anfang fuer beide Varianten 
    328330        $sql1 ="SELECT gb.gml_id AS gml_g, gb.buchungsblattnummermitbuchstabenerweiterung as blatt, b.bezirk, b.bezeichnung AS beznam, "; 
    329331        $sql1.="s1.gml_id as bsgml, s1.laufendenummer AS lfd, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.gemeinde, ot.gemarkung, ot.gemarkungsname, "; 
     
    335337                $sql1.="st_y(st_transform(st_centroid(f.wkb_geometry), ".$epsg.")) AS y ";                       
    336338        } 
    337         $sql1.="FROM alkis_beziehungen bpn "; 
    338         $sql1.="JOIN ax_namensnummer nn ON bpn.beziehung_von=nn.gml_id "; 
    339         $sql1.="JOIN alkis_beziehungen bng ON nn.gml_id=bng.beziehung_von "; 
    340         $sql1.="JOIN ax_buchungsblatt gb ON bng.beziehung_zu=gb.gml_id "; 
    341    $sql1.="JOIN alkis_beziehungen vbg ON gb.gml_id=vbg.beziehung_zu "; 
    342         $sql1.="JOIN ax_buchungsstelle s1 ON vbg.beziehung_von=s1.gml_id "; 
    343         $sql1.="JOIN ax_buchungsblattbezirk b ON gb.land=b.land AND gb.bezirk=b.bezirk "; // quer-ab 
    344  
    345         // Baustein: Zwischen-JOIN (nur bei zweiter Abfrage) 
    346         $sqlz ="JOIN alkis_beziehungen vss ON vss.beziehung_von=s1.gml_id "; 
    347         $sqlz.="JOIN ax_buchungsstelle s2 ON vss.beziehung_zu=s2.gml_id "; 
    348  
    349         // Baustein: Auswahl 1 oder 2 
    350         $sqla1 ="JOIN alkis_beziehungen vfb ON s1.gml_id=vfb.beziehung_zu "; 
    351         $sqla2 ="JOIN alkis_beziehungen vfb ON s2.gml_id=vfb.beziehung_zu "; 
    352  
    353         // Baustein: SQL-Ende fuer beide Varianten 
    354         $sql2.="JOIN ax_flurstueck f ON vfb.beziehung_von=f.gml_id "; 
    355    $sql2.="JOIN pp_gemarkung ot ON f.land=ot.land AND f.gemarkungsnummer=ot.gemarkung "; // Ortsteil 
    356         $sql2.="WHERE bpn.beziehung_zu= $1 AND bpn.beziehungsart='benennt' AND bng.beziehungsart='istBestandteilVon' "; 
    357         $sql2.="AND vbg.beziehungsart='istBestandteilVon' AND vfb.beziehungsart='istGebucht' "; 
     339 
     340        // NamenNummer >istbestandteilvon> buchungsblatt <istbestandteilvon< buchungsstelle-1 
     341        $sql1.="FROM ax_namensnummer nn "; 
     342        $sql1.="JOIN ax_buchungsblatt gb ON gb.gml_id = nn.istbestandteilvon "; 
     343        $sql1.="JOIN ax_buchungsblattbezirk b ON gb.land=b.land AND gb.bezirk=b.bezirk "; 
     344        $sql1.="JOIN ax_buchungsstelle s1 ON gb.gml_id = s1.istbestandteilvon "; 
     345 
     346        // Baustein A: Auswahl 1 oder 2 
     347        // buchungsstelle-1 <istGebucht< FS 
     348        $sqla1 ="JOIN ax_flurstueck f ON s1.gml_id = f.istgebucht "; 
     349 
     350        // buchungsStelle1 (herr.) >an> buchungsStelle2 (dien.) <istGebucht< FS 
     351        $sqla2 ="JOIN ax_buchungsstelle s2 ON s2.gml_id = ANY(s1.an) "; 
     352        $sqla2.="JOIN ax_flurstueck f ON s2.gml_id = f.istgebucht "; 
     353 
     354        // Baustein 2: SQL-Ende fuer beide Varianten 
     355        $sql2 ="JOIN pp_gemarkung ot ON f.land=ot.land AND f.gemarkungsnummer=ot.gemarkung "; // Ortsteil 
     356        $sql2.="WHERE nn.benennt = $1 AND nn.endet IS NULL AND gb.endet IS NULL AND s1.endet IS NULL AND f.endet IS NULL "; 
     357        // AND s2.endet IS NULL 
    358358 
    359359        // Parameter $gbkennz nach Klick auf Zeile "Bezirk" 
     
    368368        switch ($gfilter) { // Gemeinde-Filter 
    369369                case 1: // Einzelwert 
    370                         $sql2.="AND ot.gemeinde=".$gemeinde." "; break; 
     370                        $sql2.="AND ot.gemeinde='".$gemeinde."' "; break; 
    371371                case 2: // Liste 
    372                         $sql2.="AND ot.gemeinde in (".$gemeinde.") "; break; 
     372                        $sql2.="AND ot.gemeinde in ('".str_replace(",", "','", $gemeinde)."') "; break; 
    373373        } 
    374374        $sql3 ="ORDER BY b.bezirk, gb.buchungsblattnummermitbuchstabenerweiterung, cast(s1.laufendenummer AS integer), f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner LIMIT $2 ;"; 
     
    400400        // FÀlle ohne "Rechte an" 
    401401        if ($bltrecht != "nur") { // "nur"/"ohne" liefert nur den abgebrochene Teil der Auflistung 
    402                 // Blatt <vbg/istBestandteilVon<  Buchungsstelle <vfb/istGebucht< Flurstck. 
     402                // Blatt <istBestandteilVon<  Buchungsstelle <istGebucht< Flurstck. 
    403403                $sql=$sql1.$sqla1.$sql2.$bltwhere.$sql3; // Direkte Buchungen 
    404404                $v=array($person, $linelimit); 
     
    407407                if (!$res) { 
    408408                        echo "\n<p class='err'>Fehler bei Buchung und Flurst&uuml;ck.</p>"; 
     409                        if ($debug > 2) {echo "<p class='dbg'>SQL = '".$sql."'<p>";} 
    409410                        return; 
    410411                } 
     412 
    411413                $zfs1=0; 
    412414                $gwbez=""; 
     
    446448                        if ($bltseite > 1) {echo "weitere ";} 
    447449                        echo $zfs1." Flurst&uuml;cke"; 
     450 
    448451                        // B l À t t e r n  (eine Folgeseite anbieten) 
    449452                        $nxtbltbez=urlencode($beznam); 
     
    473476        if ($bltrecht != "ohne") { // "nur"/"ohne" liefert nur den abgebrochene Teil der Auflistung  
    474477                // Zweite Abfrage (Variante) aus den Bausteinen zusammen bauen 
    475                 // buchungsStelle2 < an < buchungsStelle1 
    476                 $sql=$sql1.$sqlz.$sqla2.$sql2.$bltwhere.$sql3; // Rechte an 
     478                // buchungsStelle2 <an< buchungsStelle1 
     479                $sql=$sql1.$sqla2.$sql2.$bltwhere."AND s2.endet IS NULL ".$sql3; // Rechte an 
    477480                $v=array($person, $linelimit); 
    478481                $res=pg_prepare("", $sql); 
     
    484487                $zfs2=0; 
    485488                $gwbez=""; 
    486                 #gwgb=""; 
    487489                while($row = pg_fetch_array($res)) {     
    488490                        $bezirk=$row["bezirk"]; 
     
    505507                                $gwbv = $bvnr; 
    506508                                $bsgml=$row["bsgml"]; 
    507                                 zeile_buchung($bsgml, $bvnr, "", true, false); // Recht an ...  // ohne Link! 
     509                                zeile_buchung($bsgml, $bvnr, "", true, false); // Recht an ... // ohne Link! 
    508510                        #       zeile_buchung($bsgml, $bvnr, $bezirk."-".$blatt, true, false); // Recht an ... 
    509511                        } 
     
    577579} elseif($person != "") { // GrundbÃŒcher zur Person 
    578580        // Das Programm hat sich selbst verlinkt aus einer Liste der Personen zu einer Suchmaske. 
    579         if ($debug >= 2) {echo "\n<p class='dbg'>Gemeinde-Filter-Steuerung = '".$gfilter."'</p>";} 
     581        //if ($debug >= 2) {echo "\n<p class='dbg'>Gemeinde-Filter-Steuerung = '".$gfilter."'</p>";} 
    580582 
    581583        // Die Filtereinstellung beeinflusst die Such-Strategie: 
Note: See TracChangeset for help on using the changeset viewer.