Ankündigung

Einklappen
Keine Ankündigung bisher.

select vereinfachen

Einklappen

Neue Werbung 2019

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

  • select vereinfachen

    Hallo zusammen,
    ich habe da mal eine Frage: kann man folgende Abfrage nicht in eine select- Anweisung stellen?

    PHP-Code:
    $daten=mysqli_query($con,"select spalte1 from tabelle1 group by spalte1");
    while(
    $row=mysqli_fetch_assoc($daten))
    {
        
    $spalte1='';
        
    $spalte1=$row["spalte1"];

        
    $daten1=mysqli_query($con,"select id from tabelle2 where spalte2='$spalte1'");
        
    $habe1=0;
        
    $habe1=mysqli_num_rows($daten1);
        if (
    $habe1>0)                                
        echo 
    $spalte1;

    Ziel ist es, nur die Spalte1 aus der Tabelle 1 anzuzeigen, wenn auch in Tabelle2 Spalte 2 den Wert von Tabelle 1 Spalte1 enthalten ist.

    Grüße und danke im Voraus für die Hilfestellung.
    Falke07

  • #2
    Ja das geht mit eine join. Lies dir mal das ganze Thema durch, damit du die Zusammenhänge verstehst.
    http://www.peterkropff.de/tutorials/...right_join.htm

    Kommentar


    • #3
      Hallo,
      hab mich mal eingelesen, bekomme aber kein Ergebniss und auch keine Fehlermeldung.
      anbei mal der Code:

      PHP-Code:
      $sel="select t10.id,t10.la_kurz,t10.laop from tabelle10 AS t10 where t10.la_kurz in (select t04.* from tabelle04 as t04 where t04.sicht='1') group by t10.laop order by t10.laop";
      $daten=mysqli_query($con$sel);
      while(
      $row=mysqli_fetch_assoc($daten))
      {
             
      $id_laop_neu='';
             
      $la_kurz='';
             
      $laop_db_neu='';

             
      $id_laop_neu=$row["id"];
             
      $la_kurz=$row["la_kurz"];
             
      $laop_db_neu=$row["laop"]; 
      Was ist da falsch, weil keine Variablen gefüllt sind?

      Gruß
      Falke07

      Kommentar


      • #4
        Zuerst ein Tipp: Query anständig formatieren. Ich mach das mal für dich:
        Code:
        SELECT
            t10.id, t10.la_kurz, t10.laop
        
        FROM
          tabelle10 AS t10
        
        WHERE
            t10.la_kurz IN (
                            SELECT t04.* FROM tabelle04 AS t04 WHERE t04.sicht='1'
                        )
        
        GROUP BY t10.laop
        
        ORDER BY t10.laop

        bekomme aber kein Ergebniss und auch keine Fehlermeldung
        Dann gibts kein Ergebnis, oder es ist ein Fehler.

        Lass mal PHP weg und die Query direkt auf der DB laufen (PMA oder einen Client a la HeidiSQL etc..). Ersten wenn die funktioniert machst du mit PHP weiter.

        Siehe auch: https://php-de.github.io/jumpto/sql/

        Auf jeden Fall müssen alle Felder im SELECT entweder gruppiert oder aggregiert sein, wenn du GROUP BY verwendest. Das ist derzeit schonmal nicht richig.

        Und wenn du sauber normalisiert hast brauchst du doch IN mit dem Subquery gar nicht?!
        The string "()()" is not palindrom but the String "())(" is.

        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Hallo,

          Und wenn du sauber normalisiert hast brauchst du doch IN mit dem Subquery gar nicht?!
          Also ich habe in Tabelle10 nur laop stehen. In Tabelle 04 steht ebenfalls laop und aber auch sicht. Und wenn in Tabelle04 sicht=1 ist, dann soll er aus Tabelle 10 laop anzeigen. Das ist das, was ich mit der Abfrage eigentlich erreichen will.

          Auf jeden Fall müssen alle Felder im SELECT entweder gruppiert oder aggregiert sein, wenn du GROUP BY verwendest. Das ist derzeit schonmal nicht richig.
          Ich verstehe nicht, was Du mit "gruppiert und aggregiert" genau meins. Kannst Du mir hier ein Beispiel nennen?

          Gruß
          Falke07

          Kommentar


          • #6
            Das hier:

            Code:
            test=# create table falke07(id int, val int);
            CREATE TABLE
            test=*# select id, val from falke07 group by id;
            FEHLER:  Spalte »falke07.val« muss in der GROUP-BY-Klausel erscheinen oder in einer Aggregatfunktion verwendet werden
            ZEILE 1: select id, val from falke07 group by id;
                                ^
            test=*#
            MySQL ist auf dem Syntaxauge blind und liefert statt einer Fehlermeldung ein falsches Resultat. Sollte man wissen ...
            PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

            Kommentar


            • #7
              Zitat von Falke07 Beitrag anzeigen
              Ich verstehe nicht, was Du mit "gruppiert und aggregiert" genau meins. Kannst Du mir hier ein Beispiel nennen?
              Hier findest du eine Erklärung auf Deutsch mit Beispielen.

              Mehr zum Thema:
              http://use-the-index-luke.com/de/sql...ren-gruppieren

              Kommentar


              • #8
                So, nun bin ich ein kleines Stückchen schlauer ;-] und es funktioniert nun.

                Vielen Dank für die Unterstützung. War sehr Hilf- und Lehrreich.

                Gruß
                Falke07

                Kommentar

                Lädt...
                X