Ankündigung

Einklappen
Keine Ankündigung bisher.

PostgreSQL: Join klappt nicht.

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #46
    Zitat von Alf2016 Beitrag anzeigen
    ..
    Oder eben PostgreSQL verwenden, es aber richtig bedienen können (bzw. die Fehler, die es macht, erkennen können, ..
    Es macht keine Fehler, es beherrscht verschiedenste Join Arten seit Jahren. Wäre es anders, würde ich es sofort wegwerfen.
    Es gibt sehr wohl aber Fehlermeldungen aus.
    Die sind für den Anwender gemacht, denn "Fehler machen", das übernimmt er in aller Regel.

    Kommentar


    • #47
      Zitat von Perry Staltic Beitrag anzeigen

      Es macht keine Fehler, es beherrscht verschiedenste Join Arten seit Jahren. Wäre es anders, würde ich es sofort wegwerfen.
      Es gibt sehr wohl aber Fehlermeldungen aus.
      Die sind für den Anwender gemacht, denn "Fehler machen", das übernimmt er in aller Regel.
      Das Ergebnis aus #5 von akretschmer ist eindeutig falsch: Der 2.2., wo lt. Vorgabe des TE Andreas, Peter und Martin anwesend waren, fehlt. Und damit ist es so, wie ich schrieb: Entweder Bedienfehler oder Fehler von akretschmer. Punkt. Wohlweislich hat er sich ja auch dann aus diesem Thread vollkommen rausgehalten.

      Was sich hier in Sachen Datenbanken offenbart, ist das reine Desaster.

      Ansonsten spricht aus deinen Zeilen ein gefährlicher Technik-Glaube und Glaube an die Unfehlbarkeit von Entwicklern.

      Mittlerweile habe ich eine Funktion geschrieben, die eine solche Liste wie die von akretschmer angestrebte als Array schreibt. Das Ergebnis ist für die vom TE vorgegebenen Daten:
      PHP-Code:
      array(4) { [0]=> array(3) { ["trdat"]=> string(10"2019-01-01" ["anwesend"]=> string(13"Martin, Peter" ["abwesend"]=> string(7"Andreas" } [1]=> array(3) { ["trdat"]=> string(10"2019-02-02" ["anwesend"]=> string(22"Andreas, Martin, Peter" ["abwesend"]=> string(0"" } [2]=> array(3) { ["trdat"]=> string(10"2019-04-02" ["anwesend"]=> string(7"Andreas" ["abwesend"]=> string(13"Martin, Peter" } [3]=> array(3) { ["trdat"]=> string(10"2019-10-10" ["anwesend"]=> string(0"" ["abwesend"]=> string(22"Andreas, Martin, Peter" } } 

      Kommentar


      • #48
        Es ist nicht mein Problem oder das von Postgres, wenn ein User Abfragen vorschlägt, die fehlerhaft sind.
        Und es mangelt mir an Zeit und Ehrgeiz, alles zu kontrollieren oder korregieren, was hier geschrieben wird. Momentan kostest Du mit Deinen Aussagen die meiste Zeit.

        Was hat das mit gefährlichem Technikglauben zu tun, wenn ich ein System so einsetze, wie es dacht ist?
        Was machst Du mit Deinen Primärschlüsseln? Zählst Du abends bei Deinen DB persönlich nach?

        Kommentar


        • #49
          Zitat von Perry Staltic Beitrag anzeigen
          Es ist nicht mein Problem oder das von Postgres, wenn ein User Abfragen vorschlägt, die fehlerhaft sind.
          Und es mangelt mir an Zeit und Ehrgeiz, ...
          Wenn es dir an Ehrgeiz fehlt, wie erklärt sich dann Beitrag #7?

          Ab jetzt auch hier: *ignore*

          Kommentar


          • #50
            Das fand sich noch in der "Restebox":
            PHP-Code:
            <?php
              $intCnt 
            0;
              include 
            "w9a_functions.php";

              
            $arrOutFu fnc_anwListe();

              if (
            gettype($arrOutFu[0]) == "array") {
                
            $blnTabelleSchreib TRUE
              } else {
                
            $blnTabelleSchreib FALSE;  
              }  
            ?>
            <!DOCTYPE html>
            <html lang="de">
            <head>
              <meta charset="utf-8">
              <title>Spielerliste</title>
            </head>
            <body>
              <section style="padding-left: 10px;">
              <h3>Spieler-Anwesenheitsliste</h3>
            <?php 
              
            if ($blnTabelleSchreib == FALSE) { ?>
                <p>Die Tabelle kann nicht angezeigt werden, Fehler:<br>
            <?php 
                
            echo $arrOutFu[1]; ?></p>
            <?php
              
            } else { ?>
                <table>
                <tr>
                  <th>Trainingsdatum</th>
                  <th>anwesend</th>
                  <th>abwesend</th>
                </tr>
            <?php 
                
            for ($intCnt=0;$intCnt<4;$intCnt++) { ?>
                <tr>
                  <td><?php $dateTr = new DateTime($arrOutFu[$intCnt]["trdat"]);
                            echo 
            '&nbsp; '.date_format($dateTr'd.m.Y').'&nbsp; '?></td>
                  <td><?php echo '&nbsp; '.$arrOutFu[$intCnt]["anwesend"].'&nbsp; '?></td>
                  <td><?php echo '&nbsp; '.$arrOutFu[$intCnt]["abwesend"].'&nbsp; '?></td>
                </tr>
            <?php 
                
            ?> 
                </table>  
            <?php 
              
            ?> 
            </section>  
            </body>
            </html>
            Die Funktion fnc_anwListe() liefert das Array aus #47. Die wird hier zu ein einfachen Tabelle verarbeitet.

            Kommentar


            • #51
              Warum bist du von deinem eigenen Grundsatz abgerückt Alf2016 ?

              Zitat von Alf2016 Beitrag anzeigen

              Schlimm genug, daß sowas in PHP überhaupt funktioniert.
              Zitat von Alf2016 Beitrag anzeigen
              Hier bist du ja nicht nur in dem oben benannten Punkt (keine Unterbrechung von php-Code durch Fremdcode) meinem implizit formulierten Grundsatz gefolgt
              sorry, shift-taste kaputt

              Kommentar


              • #52
                Zitat von Meister1900 Beitrag anzeigen
                Warum bist du von deinem eigenen Grundsatz abgerückt Alf2016 ?


                Und welchen Erkenntnisgewinn - insbesondere für die Community - versprichst du dir denn nun von dieser Frage?

                Abgesehen davon:
                • Es sieht Sch... aus.
                • Es kommt zu solchen "Konstrukten" wie
                  PHP-Code:
                  <?php
                        
                  ?>
                • Es widerspricht im Grunde dem EVA-Prinzip, da es Teile der Verarbeitung in den HTML-body verlagert.
                Aber war einfach mal eine sportliche "Fingerübung".

                Zurück zu deiner Frage: Das sind Fragen, die 16-jährige und Trolls stellen. Ich hatte dich da bisher anders eingeschätzt.

                Die Antwort: Taktische Gründe. Weil dir das klar ist und um eine Diskussion zu provozieren, hakst du genau da ein. Provozieren. Trollerei eben.

                Kommentar


                • #53
                  Aber so ist es natürlich viel schöner:
                  PHP-Code:
                  <?php
                    $intCnt 
                  0;
                    include 
                  "w9a_functions.php";

                    
                  $arrOutFu fnc_anwListe();

                    if (
                  gettype($arrOutFu[0]) == "array") {
                      
                  $strFehlertext '';
                      
                  $strTabText fnc_schreibeTab($arrOutFu);
                    } else {
                      
                  $strFehlertext '<p>Die Tabelle kann nicht angezeigt werden, Fehler:<br>'.
                          
                  $arrOutFu[1];
                      
                  $strTabText '';        
                    }  
                  ?>
                  <!DOCTYPE html>
                  <html lang="de">
                  <head>
                    <meta charset="utf-8">
                    <title>Spielerliste</title>
                  </head>
                  <body>
                    <section style="padding-left: 10px;">
                      <h3>Spieler-Anwesenheitsliste</h3>
                  <?php
                      
                  echo $strFehlertext;
                      echo 
                  $strTabText;
                  ?> 
                    </section>  
                  </body>
                  </html>
                  Wobei - mmh... Moment mal...

                  Kommentar


                  • #54
                    Ein Schritt in die richtige Richtung, auch wenn du die Funktion fnc_schreibeTab() gar nicht zeigst.
                    Hier meine Vorschlag:

                    PHP-Code:
                    <?php
                    function arr2table($data) {
                      if (! 
                    is_array($data)) {
                        return 
                    'Die Tabelle kann nicht angezeigt werden';
                      }

                      
                    array_unshift($dataarray_keys($data[0]));

                      
                    $tableData "<table>";

                      foreach(
                    $data as $rowCount => $row) {
                          
                    $tableData .= "<tr>";
                          foreach(
                    $row as $key => $column){
                              
                    $tag $rowCount == 'th' 'td';
                              
                    $tableData .= "<$tag>" htmlspecialchars($columnENT_QUOTES'UTF-8') . "</$tag>";
                          }
                          
                    $tableData .= "</tr>";
                      }
                      
                    $tableData .= "</table>";    

                      return 
                    $tableData;
                    }

                    // Daten normalerweise aus Datenbank
                    $data = array ( 
                      array ( 
                    'trdat' => '2019-01-01''anwesend' => 'Martin, Peter''abwesend' => 'Andreas' ), 
                      array ( 
                    'trdat' => '2019-02-02''anwesend' => 'Andreas, Martin, Peter''abwesend' => '' ),
                      array ( 
                    'trdat' => '2019-04-02''anwesend' => 'Andreas''abwesend' => 'Martin, Peter' ),
                      array ( 
                    'trdat' => '2019-10-10''anwesend' => '''abwesend' => 'Andreas, Martin, Peter' )
                    );
                    ?>

                    <!DOCTYPE html>
                    <html lang="de">
                    <head>
                      <meta charset="utf-8">
                      <title>Spielerliste</title>
                    </head>
                    <body>
                      <h3>Spieler-Anwesenheitsliste</h3>
                    <?= arr2table($data); ?>
                    </body>
                    </html>
                    Auf den anderen geistigen Dünnschiss von dir gehe ich mal besser nicht ein.
                    sorry, shift-taste kaputt

                    Kommentar


                    • #55
                      Zeile 14 ist gut!

                      Kommentar


                      • #56
                        Wenn ich zwischen den drei Codeschnippseln wählen müsste, würde ich den aus #50 nehmen. Da stören mich eigentlich nur die Typen-Prefixe an den Variablen, die Ausgabe von $arrOutFu[1] (wahrscheinlich die ganze fnc_anwListe()) und die ==-Vergleiche.
                        Bei der Ausgabe könnte DateTime noch Probleme machen, da müsste man noch ein Try-Catch rumbasteln, aber sonst sind die Daten bereits gesammelt und aufbereitet -> Fertig für die Ausgabe.

                        Bei arr2table fehlt mir der Typehint für den Parameter. Die is_array-Abfrage muss noch sicherstellen, dass da auch Datensätze im Array sind. (Das sind nicht die Gründe warum ich den anderen Schnippsel vorziehe)
                        [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
                        [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

                        Kommentar


                        • #57
                          Zitat von VPh Beitrag anzeigen
                          Wenn ich zwischen den drei Codeschnippseln wählen müsste, würde ich den aus #50 nehmen. Da stören mich eigentlich nur die Typen-Prefixe an den Variablen, die Ausgabe von $arrOutFu[1] (wahrscheinlich die ganze fnc_anwListe()) und die ==-Vergleiche.
                          Bei der Ausgabe könnte DateTime noch Probleme machen, da müsste man noch ein Try-Catch rumbasteln, aber sonst sind die Daten bereits gesammelt und aufbereitet -> Fertig für die Ausgabe.
                          Zu $arrOutFu[0] und $arrOutFu[1] fehlten in #50 noch wesentliche Informationen - wie es schon drübersteht, ich habe da sozusagen nur den "Papierkorb" geleert und dabei ein bissle Aschenputtel gespielt. Die fehlende Information steht im Kopf der Funktion fnc_anwListe:
                          PHP-Code:
                          ##################################################################################
                          ## -------------------- FUNCTION fnc_anwListe --------------------------------- ##
                          ## PARAMETER:  keine                                                            ##
                          ##                                                                              ##
                          ## RÜCKGABE:   $rc als Array mit den Daten                                      ##
                          ##             im Fehlerfall:                                                   ##
                          ##             $rc[0]:   interner Fehlercode                                    ##
                          ##             $rc[1]:   Kurzbeschreibung des Fehlers                           ##
                          ## VERWENDUNG:                                                                  ##
                          ## AUFGABE:    Aufbau eines 2-dimensionalen Arrays für die Spieler-Anw.-Liste   ##
                          ################################################################################## 
                          Zu beachten ist, daß die Funktion im Fehlerfall ein eindimensionales Array ausgibt. Nur so ist es möglich, es entsprechend einzusetzen. Die Überprüfung mit
                          PHP-Code:
                          if (is_array($arrOutFu[0])) {
                              
                          $blnTabelleSchreib TRUE;
                            } else {
                              
                          $blnTabelleSchreib FALSE;  
                            } 
                          hätte sonst überhaupt nicht funktioniert. Die Anforderung, die du unten formulierst ("daß da auch Datensätze im Array sind") ist dadurch bereits erfüllt (=> $blnTabelleSchreib = TRUE;) oder die Tabelle wird überhaupt nicht ausgegeben. Was ist an der DateTime-Geschichte problematisch?

                          Bei arr2table fehlt mir der Typehint für den Parameter. Die is_array-Abfrage muss noch sicherstellen, dass da auch Datensätze im Array sind. (Das sind nicht die Gründe warum ich den anderen Schnippsel vorziehe)
                          Warum du hier Typdeklarationen (früher: "Typehints") forderst, sehe ich nicht - er prüft doch später mit "is_array"?

                          Kommentar


                          • #58
                            Die Anforderung, die du unten formulierst ("daß da auch Datensätze im Array sind")
                            Die Anforderung bezieht sich auf #54.
                            Wenn ich der Funktion ein leeres Array übergebe kommt es zu Fehlermeldungen.

                            Was ist an der DateTime-Geschichte problematisch?
                            Nichts, wirft halt eine Exception wenn da problematische Werte übergeben werden. Einfach auf Nummer sicher gehen und die Exception fangen, dann ist gut.

                            Warum du hier Typdeklarationen (früher: "Typehints") forderst, sehe ich nicht - er prüft doch später mit "is_array"?
                            Damit das Programm so schnell wie möglich abbricht wenn der Entwickler die Funktionen falsch füttert.
                            Zudem können IDE's die Typehints lesen und beim Programmieren entsprechende Hinweise und Fehler anzeigen.
                            [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
                            [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

                            Kommentar


                            • #59
                              Was passiert da oben gerade?
                              PHP-Code:
                              <?php
                              function quadrat2(){return 4;}
                              function 
                              quadrat3(){return 9;}
                              echo 
                              quadrat2();
                              ?>
                              deutsche Variablenbezeichner vermengt mit englischen Funktionsbezeichnern, eine function ohne Parameter die ein seltsames Array zurückgibt, welches bei 3 Namen noch lesbar ist aber bei 20??

                              Kommentar


                              • #60
                                Zitat von VPh Beitrag anzeigen
                                Die Anforderung bezieht sich auf #54.
                                Wenn ich der Funktion ein leeres Array übergebe kommt es zu Fehlermeldungen.
                                Nun ja, wenn er, wie er schreibt "// Daten normalerweise aus Datenbank" geht er offenbar davon aus, daß die ihm das dann auch "von selbst" so zur Verfügung stellt. Tatsächlich ist das, was er dann aufführt, 1:1 das Ergebnis meiner Funktion. Und die liefert eben entweder ein Array mit mind. 1 Zeile, oder den Fehlercode -1 und die Kurzbeschreibung "Datenfehler". Das konnte er aber nicht wissen, von daher: Kritik zutreffend.


                                Nichts, wirft halt eine Exception wenn da problematische Werte übergeben werden. Einfach auf Nummer sicher gehen und die Exception fangen, dann ist gut.
                                Im Grunde das Gleiche wie oben: Bei Verwendung meiner Funktion nicht möglich, sonst: wer weiß?!...

                                Damit das Programm so schnell wie möglich abbricht wenn der Entwickler die Funktionen falsch füttert.
                                Wieder dasselbe: "Füttert" er meine Funktion falsch, gibt die bereits den Fehler aus. Ansonsten auch wieder dasselbe: Wer weiß?!...
                                Zudem können IDE's die Typehints lesen und beim Programmieren entsprechende Hinweise und Fehler anzeigen.
                                Das wußte ich nicht. Bei mir gibt's dafür die Präfixe...

                                Bemerkung: Alle deine Bemerkungen setzen eine "Software-Bude" voraus, in der es "drunter und drüber" geht oder eben das Verhalten von Fragestellern in Foren. In einem vernünftig geführten Betrieb gibt es Coding-Richtlinien, Konventionen und Dokumentationen bspw. zu den im nicht-oo-Bereich verwendeten Funktionen.

                                Kommentar

                                Lädt...
                                X