Ignore:
Timestamp:
09/15/14 17:52:35 (10 years ago)
Author:
frank.jaeger
Message:

Anpassung der Auskunft-Programme an variabel lange gml_id und Datenbanken mit "beendeten" Objekten.

File:
1 edited

Legend:

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

    r333 r334  
    66        2014-02-06  Korrektur zeile_person 
    77        2014-09-03  PostNAS 0.8: ohne Tab. "alkis_beziehungen", mehr "endet IS NULL", Spalten varchar statt integer 
    8         2014-09-10  Bei Relationen den Timestamp abschneiden 
     8        2014-09-15  Bei Relationen den Timestamp abschneiden, mehr "endet IS NULL" 
    99*/ 
    1010 
     
    236236        global $gemeinde, $blattgml, $epsg, $gfilter, $debug; 
    237237 
    238         // SQL-Bausteine vorbereiten 
     238        // SQL-Bausteine 
    239239        // vorne gleich 
    240240        $sql1 ="SELECT s1.laufendenummer AS lfd, s1.gml_id AS bsgml, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.gemeinde, "; 
     
    248248        $sql1.="g.gemarkung, g.gemarkungsname FROM ax_buchungsstelle s1 ";  
    249249 
    250         // 2 Varianten zwischen 
     250        // zwischen, Variante 1. 
    251251    $sqlz1="JOIN ax_flurstueck f ON f.istgebucht=substring(s1.gml_id,1,16) "; 
    252          
    253         $sqlz2 ="JOIN ax_buchungsstelle s2 ON substring(s2.gml_id,1,16)=ANY(s1.an) "; // nur an oder "an" und "zu" ? 
    254 // Test: SELECT * FROM ax_buchungsstelle WHERE NOT zu IS NULL;  // keine Treffer fÃŒr "zu" 
    255 //      $sqlz2 ="JOIN ax_buchungsstelle s2 ON (substring(s2.gml_id,1,16)=ANY(s1.an) OR substring(s2.gml_id,1,16)=ANY(s1.zu)) ";  
    256     $sqlz2.="JOIN ax_flurstueck f ON f.istgebucht=substring(s2.gml_id,1,16) "; 
     252 
     253        // zwischen, Variante 2. Nur an oder "an" und "zu"? 
     254        $sqlz2 ="JOIN ax_buchungsstelle s2 ON substring(s2.gml_id,1,16)=ANY(s1.an)  
     255        JOIN ax_flurstueck f ON f.istgebucht=substring(s2.gml_id,1,16) "; 
    257256 
    258257        // hinten gleich 
    259         $sql2.="JOIN pp_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkung "; 
    260         $sql2.="WHERE s1.istbestandteilvon = $1 "; 
     258        $sql2.="JOIN pp_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkung  
     259        WHERE s1.istbestandteilvon = $1 AND f.endet IS NULL AND s1.endet IS NULL "; 
    261260        switch ($gfilter) { 
    262261                case 1: // Einzelwert 
     
    265264                        $sql2.="AND g.gemeinde in ('".str_replace(",", "','", $gemeinde)."') "; break; 
    266265        } 
    267         $sql2.="ORDER BY cast(s1.laufendenummer AS integer), f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner LIMIT $2 ;"; 
    268  
    269         // Abfrage:  d i r e k t e  B u c h u n g e n 
    270         // Blatt <vbg/istBestandteilVon<  Buchungsstelle <vfb/istGebucht< FlurstÃŒck 
    271         #$sql=$sql1.$sqlz1.$sql2; // Direkte Buchungen 
    272  
    273         $v=array($blattgml, $linelimit); 
    274         $res=pg_prepare("", $sql1.$sqlz1.$sql2); 
     266 
     267        // WHERE-Zusatz bei 2 
     268        $sqlw2=" AND s2.endet IS NULL "; 
     269 
     270        $sqlord="ORDER BY cast(s1.laufendenummer AS integer), f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner LIMIT $2 ;"; 
     271 
     272        // d i r e k t e  B u c h u n g e n 
     273        // Blatt <istBestandteilVon<  Buchungsstelle <istGebucht< FlurstÃŒck 
     274        $v=array(substr($blattgml,0,16), $linelimit); // Rel. istBestandteilVon nur 16 Stellen 
     275        $res=pg_prepare("", $sql1.$sqlz1.$sql2.$sqlord); 
    275276        $res=pg_execute("", $v); 
    276277        if (!$res) { 
    277278                echo "\n<p class='err'>Fehler bei Buchung und Flurst&uuml;ck.</p>"; 
    278                 if ($debug >= 3) {echo "\n<p class='err'>".$sql1.$sqlz1.$sql2."</p>";} 
     279                if ($debug >= 3) {echo "\n<p class='err'>SQL='".$sql1.$sqlz1.$sql2.$sqlord."'<br>$1 = '".substr($blattgml,0,16)."'</p>";} 
    279280                return; 
    280281        } 
     
    308309        if($zfs1 > 0) {echo "<hr>";} // Trennen 
    309310 
    310         // Abfrage:  R e c h t e  a n   /   d i e n e n d e  B u c h u n g e n 
     311        // Rechte "an"  (dienende  Buchungen) 
    311312        $v=array($blattgml, $linelimit); 
    312         $res=pg_prepare("", $sql1.$sqlz2.$sql2); 
     313        $res=pg_prepare("", $sql1.$sqlz2.$sql2.$sqlw2.$sqlord); 
    313314        $res=pg_execute("", $v); 
    314315        if (!$res) { 
    315316                echo "\n<p class='err'>Fehler bei Recht an Buchung.</p>"; 
    316                 #if ($debug >= 3) {echo "\n<p class='dbg'>".$sql1.$sqlz2.$sql2."</p>";} 
     317                #if ($debug >= 3) {echo "\n<p class='dbg'>".$sql1.$sqlz2.$sql2.$sqlw2.$sqlord."</p>";} 
    317318                return; 
    318319        } 
Note: See TracChangeset for help on using the changeset viewer.