php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 06.07.2005, 16:20  
Erfahrener Benutzer
 
Registriert seit: 14.09.2004
Beiträge: 382
Crypi
Standard bei query über drei tabellen müssen alle drei mindestens...

eine zeiel enthalten.

Moin,

ich hab mir die folgende Abfrage gebastelt:
"SELECT
b.lfdnr_felder, b.berechtigung, c.berechtigung
FROM
kerp_zuofese as a, kerp_zuofebe as b, kerp_zuofebespeziall as c
WHERE
b.lfdnr_sicherheitsstufe='$sicherheitsstufe'
AND
a.lfdnr_seite='$seitenindex'
AND
b.lfdnr_felder=a.lfdnr_felder";
damit überhaupt eine zeile ausgewählt wird muss in allen tabellen mindestens eine zeile vorhanden sein. ich weiß das c hier noch nicht benötigt wird, aber zukünftigt.

Kann mir jemand sagen ob das normal ist?

Crypi
Crypi ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 06.07.2005, 17:57  
Gast
 
Beiträge: n/a
Standard

das ist normal
  Mit Zitat antworten
Alt 07.07.2005, 11:49  
Gast
 
Beiträge: n/a
Standard

So, wie du den SELECT geschrieben hast, ist das normal, da deine WHERE-Bedingungen nicht erfüllt sind, wenn in einer Tabelle nix drin steht.

Grundsätzlich würde ich dir empfehlen, nicht mit CROSS JOINs (Tabellen Namen im FROM nur hintereinander schreiben), da dies den SELECT gerade bei grösseren Datenmengen extrem verlangsamt. Der Verknüpft dann erst jede Zeile mit jeder aus den anderen Tabellen und wendet dann die WHERE-Bedingung an. Sinnvoller und schneller geht es über INNER JOINs. Sähe dann so aus:

SELECT
b.lfdnr_felder, b.berechtigung, c.berechtigung
FROM
kerp_zuofese as a,
INNER JOIN kerp_zuofebe as b
ON b.lfdnr_felder=a.lfdnr_felder
INNER JOIN kerp_zuofebespeziall as c
ON [Verknüpfung zu a und oder b]
WHERE b.lfdnr_sicherheitsstufe='$sicherheitsstufe'
AND a.lfdnr_seite='$seitenindex'

Würde dir aber immer noch nix anzeigen. Wenn du was angezeigt haben willst, solltest du mit OUTER JOINs arbeiten, da wird dann auch was angezeigt, wenn in einer Tabelle nix steht:

SELECT
b.lfdnr_felder, b.berechtigung, c.berechtigung
FROM
kerp_zuofese as a,
LEFT OUTER JOIN kerp_zuofebe as b
ON b.lfdnr_felder=a.lfdnr_felder
LEFT OUTER JOIN kerp_zuofebespeziall as c
ON [Verknüpfung zu a und oder b]
WHERE b.lfdnr_sicherheitsstufe='$sicherheitsstufe'
AND a.lfdnr_seite='$seitenindex'

Hier müsste jetzt nur was in a stehen, dann käme was zurück.
  Mit Zitat antworten
Alt 08.07.2005, 12:36  
Erfahrener Benutzer
 
Registriert seit: 14.09.2004
Beiträge: 382
Crypi
Standard

Danke für die Hilfe!

Wodurch kommt es das nie etwas angezeigt wird?
Die Tabelle c spielt doch bei den WHERE-Bedingungen keine Rolle?
Also müsste es doch eigentlich auch ohne einen Eintrag in c ein Ergebniss geben oder?

Werds mal mit den anderen Möglichkeiten probieren!
Danke!

Crypi
Crypi ist offline   Mit Zitat antworten
Alt 09.07.2005, 11:58  
Gast
 
Beiträge: n/a
Standard

Habe mich noch nicht so explizit mit CROSS JOINs beschäftigt, da die meistens nicht die optimale Lösung sind. Bei solchen JOINs erstellt SQL erstmal alle möglichen Kombinationen der Datensätze. Wenn in allen 3 Tabellen 2 Datensätze stehen, erhält das Ergebis vor der WHERE-Bedingung 2*2*2 Datensätze. Wenn jetzt eine dieser Tabellen leer ist, kann es sein, dass er dann nix zurückgibt, weil er 2*2*0 Datensätze als Ergebnis liefert.
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Tabellen für Vokabeltrainer anlegen... anonym01 PHP Tipps 2008 9 03.03.2008 21:18
PHP Array in MYSQL Tabellen schreiben Matt Datenbanken 1 26.02.2008 19:43
[Erledigt] verschachtelter Query über 3 Tabellen Datenbanken 2 04.05.2006 17:34
3 Tabellen verbinden madSoul Datenbanken 4 30.03.2006 15:37
Join-Abfrage über mehrere Tabellen sinai Datenbanken 3 04.02.2006 13:05
Query über 3 Tabellen? jensK Datenbanken 4 12.01.2006 08:44
einträge aus 2 tabellen sortieren Tschuu Datenbanken 11 20.12.2005 08:21
[Erledigt] abfrage mehrere tabellen PHP Tipps 2005-2 3 31.10.2005 21:57
Anhand Union Spalte aus anderen Tabellen selekt. und sort. Datenbanken 1 02.08.2005 11:34
2 Tabellen auf gleichen Feldinhalt zu prüfen Datenbanken 6 23.02.2005 12:02
mysql update query mit mehreren Tabellen funktioniert nicht PHP-Fortgeschrittene 5 08.01.2005 16:29
[Erledigt] Selectanfrage an eine Datenbank,aber aus mehreren Tabellen Datenbanken 2 26.10.2004 07:23
[Erledigt] Query, der Daten innerhalb DB zwischen Tabellen verschiebt Datenbanken 6 18.09.2004 14:38
suche über 8 tabellen PHP Tipps 2004 3 03.09.2004 12:48
[Erledigt] Query läuft nicht Datenbanken 6 13.08.2004 21:13

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
berechtigung query join, join wenn tabelle nicht leer

Alle Zeitangaben in WEZ +2. Es ist jetzt 10:50 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.