Bahar: 2 select Abfragen verknüpfen

Hi alle zusammen ich versuche gerade 2 Selectbefehle zu verschachteln. Kurze Info:

ordner_register table:
register_id
ordner_id
(Verbindungstabelle zwischen ordner und register table)

register table
register_id
register_name
register_inhalt
deletedstatus

Ich muss jetzt diese beiden Select befehle Verknüpfen

Select 1:
Select register_id from ordner_register WHERE ordner_id = $ID;

Select 2;
Select * from register where deletedstatus = '0'

Also er soll mir alle Register ausgeben die der Ordner hat die aber nicht gelöscht gesetzt wurden. Ich hatte die Idee vllt ein and dazwischen klappt nicht oder inner join aber ich hab 2 unterschiedliche where bedingungen. Hat jemand eine Idee

  1. Hallo liebe SELFHTMLer,

    SELECT * FROM ordner_register, register WHERE register.deletestatus = '0' AND ordner_register.ordner_id = ...

    Das sollte es eigentlich sein.
    LG
    kev1n

    --

    SELFCODE:
    sh:( fo:| ch:? rl:° br:^ ie:{ mo:| va:) de:] zu:) ss:| ls:[ js:|
    ---
    1. Mahlzeit kEv*,

      SELECT * FROM ordner_register, register WHERE register.deletestatus = '0' AND ordner_register.ordner_id = ...

      Das sollte es eigentlich sein.

      Nein, sollte es nicht. Diese implizite JOIN-Syntax ist fehlerträchtig und macht die Abfrage nur unleserlich und schwer verständlich. Ich empfehle da die Einführung in JOINs ...

      SELECT r.register_id     -- Es ist NIE eine gute Idee, * zu benutzen!  
      ,      r.register_name  
      ,      r.register_inhalt  
      ,      r.deletedstatus  
        FROM register        r  
        JOIN ordner_register or ON r.register_id = or.register_id  
       WHERE or.ordner_id = $ID -- wenn dies eine PHP-Variable sein soll, solltest Du hier sinnvollerweise [link:http://de3.php.net/manual/en/function.mysql-real-escape-string.php@title=mysql_real_escape_string()] benutzen!  
         AND r.deletedstatus = '0' -- Einen numerischen Wert in einem Textfeld zu speichern, ist höchst unsinnig ... Bahar, [pref:t=179225;m=1182564@title=Cheatah] hatte da eine erheblich bessere Idee  
      ;
      

      Abgesehen davon halte ich diesen Thread für ein Doppelposting, da es sich um eine Folgefrage zu Bahars ursprünglichem Problem handelt ...

      MfG,
      EKKi

      --
      sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
      1. Hallo liebe SELFHTMLer,

        [code lang=sql]SELECT r.register_id     -- Es ist NIE eine gute Idee, * zu benutzen!

        Warum?

        JOIN ordner_register   or ON r.register_id = or.register_id

        ^
                                 |- fehlt da ein AS?

        LG
        kev1n

        --

        SELFCODE:
        sh:( fo:| ch:? rl:° br:^ ie:{ mo:| va:) de:] zu:) ss:| ls:[ js:|
        ---
        1. Hallo,

          SELECT r.register_id     -- Es ist NIE eine gute Idee, * zu benutzen!

          Warum?

          JOIN ordner_register   or ON r.register_id = or.register_id

          
          >                          ^  
          >                          |- fehlt da ein AS?  
            
          Nein AS ist in MySQL optional, es gibt SQL-Dialekte, die sich an AS stören, also läßt man's lieber weg ...  
          ... aber "or" ist kein guter Aliasname - unabhängig vom SQL-Dialekt (die Syntaxhervorhebung hebt es hervor) ;-)  
            
          Mir bot sich [kürzlich](https://forum.selfhtml.org/?t=179165&m=1182177) ausgerechnet "as" als Aliasname an, ich nahm lieber a.  
            
            
          Freundliche Grüße  
            
          Vinzenz
          
          1. Hallo liebe SELFHTMLer,

            Und warum sollte man immer nur die Spalten Abfragen die man benötigt und nicht generell * nehmen?

            LG
            kev1n

            --

            SELFCODE:
            sh:( fo:| ch:? rl:° br:^ ie:{ mo:| va:) de:] zu:) ss:| ls:[ js:|
            ---
            1. echo $begrüßung;

              Und warum sollte man immer nur die Spalten Abfragen die man benötigt und nicht generell * nehmen?

              Weil einem alle Welt das so sagt.

              Früher war das ja auch noch eine Runde sinnvoller als heute, denn die Maschinen waren leistungsärmer. Heutzutage ist das vielleicht kein großes Kriterium mehr. Generell gilt aber, das nicht übertragenes Überflüssige ressourcenschonender ist als pauschal alles zu verlangen und die Hälfte wegzuwerfen.

              Ein weiteres Kriterium ist die Reihenfolge der Spalten im Ergebnis. Ohne konkrete Angabe in der SELECT-Klausel können die Felder in beliebiger Reihenfolge ausgeliefert werden. Moderne APIs gestatten jedoch einen Zugriff über den Feldnamen, so dass damit die Eindeutigkeit trotz undefinierter Reihenfolge gewahrt bleibt.

              echo "$verabschiedung $name";