2 select Abfragen verknüpfen
Bahar
- datenbank
0 kEv*
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
Hallo liebe SELFHTMLer,
SELECT * FROM ordner_register, register WHERE register.deletestatus = '0' AND ordner_register.ordner_id = ...
Das sollte es eigentlich sein.
LG
kev1n
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
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
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
Hallo liebe SELFHTMLer,
Und warum sollte man immer nur die Spalten Abfragen die man benötigt und nicht generell * nehmen?
LG
kev1n
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";