Antworten auf deine Fragen:
Neues Thema erstellen

Verschachteltes SELECT liefert 0 zurück

rey

Der Frager ;)

hi,
ich habe verschiedene Daten in der Datenbank welche ausgelesen werden sollen sofern der user in einer der benötigten Gruppen vorhanden ist.
ich habe es mit einem verschachtelten select versucht jedoch liefert es mir immer den Wert 0 zurück.
PHP:
$datei_vorgang = "SELECT directory.`directoryID`,directory.`dir_name`,directory.`creatorID`,directory.`level`,directory.`Main_Directory`, ";
$datei_vorgang .= " directory.`creationDate`,(SELECT user_group_combi.`groupID` FROM user_group_combi ";
$datei_vorgang .= " WHERE user_group_combi.`userID`='38')AS accessg FROM directory WHERE directory.`creatorID`='38' AND directory.`access_group`='accessg' ";
$datei_vorgang .= " AND directory.`level`='1' ";
$datei_vorgang .= " AND directory.`depID`='1' AND directory.`freigabe`='1'";
$datei= mysql_query($datei_vorgang)or die(mysql_error());
echo mysql_num_rows($datei);
 
Zuletzt bearbeitet:

McLoude

Highlander

AW: Verschachteltes SELECT liefert 0 zurück

Hast Du mal den gesamten SQL-String (Query) genommen und im phpMyAdmin oder so eingefügt und abgeschick? Bekommst Du dort Ergebnisse? Sehe jetzt auf Anhieb nicht woran es liegen könnte
 

rey

Der Frager ;)

AW: Verschachteltes SELECT liefert 0 zurück

da bekomme ich auch 0 raus aber ich müsste eigentlich zwei Zeilen bekommen.
 

rey

Der Frager ;)

AW: Verschachteltes SELECT liefert 0 zurück

Ja die Überlegung hatte ich auch schon bloß verstehe ich das nicht ist etwas zu abstrakt erklärt.
zumal ich ja noch differenzieren muss.
Es soll ja überprüfen ob dieser Datensatz vorhanden ist wo die userID übereinstimmt
 
Zuletzt bearbeitet:

McLoude

Highlander

AW: Verschachteltes SELECT liefert 0 zurück

tja, ist auch schwer, das weniger abstrakt zu erklären ;-)

ich versuchs mal, wobei die anwendung leichter ist als die erklärung:
SELECT a.vnum, a.vname, b.knum, b.kname
FROM tverkauf a, tkunden b
WHERE a.vnum = b.vnum
ORDER BY vnum;
Du hast 2 Tabellen die du anhand des buchstaben a und b definierst. Wie im Beispiel
tverkauf a und tkunden b

Du kannst dann mit
a.vname oder b.kname auf spalten eben dieser Tabellen im Select zugreifen als ob es ein normaler select wäre.

Und verstanden?
 

JonJonson

Aktives Mitglied

AW: Verschachteltes SELECT liefert 0 zurück

Wenn man die Datenbank kennt, könnte man es eleganter lösen, aber so sollte es in etwa aussehen:
PHP:
$datei_vorgang="SELECT d.directoryID, d.dir_name, d.creatorID ,d.level, d.Main_Directory, d.creationDate, g.groupID FROM directory d, user_group_combi g WHERE d.creatorID = g.userID AND g.userID=38 AND d.access_group = 'accessg' AND d.level='1' AND d.depID='1' AND d.freigabe='1'"

Was aber noch nicht passt: Bei den Bedingungen willst du "AND d.depID=1"; du fragst aber d.depID nicht ab, bei d.freigabe ist es das gleiche.

Also muss es dann so heisen:
PHP:
$datei_vorgang="SELECT d.directoryID, d.dir_name, d.creatorID ,d.level, d.Main_Directory, d.creationDate, d.depID, d.freigabe, g.groupID FROM directory d, user_group_combi g WHERE d.creatorID = g.userID AND g.userID=38 AND d.access_group = 'accessg' AND d.level='1' AND d.depID='1' AND d.freigabe='1'"

Wenn du die beiden bei deiner Abfrage noch rein schreibst, sollte die auch gehen.
 

rey

Der Frager ;)

AW: Verschachteltes SELECT liefert 0 zurück

uhm... ich habe mich zu früh gefreut.
Nun stellt zeigt es mir die Daten pro Gruppe an obwohl es eigentlich nur eine Gruppe ist.
Da der Benutzer und die Gruppe eine n:n Beziehung haben. Soll ja bloß geguckt werden mit dem INNER Join ob der User Mitglied einer dieser Gruppen ist, wenn Ja dann zeige mir diesen Datensatz sonst eben nicht.
Bei mir ist es aber das folgende der Fall es sieht nach ob der Benutzer Mitglied einer der Gruppen ist zeigt mir auch den Datensatz an aber zeigt Ihn mir pro Gruppen Mitgliedschaft an.
Das heißt wenn der Benutzer in 1000 Gruppen ist zeigt es mir den selben Datensatz 1000 mal an. So etwas sollte natürlich vermieden werden.
PHP:
$datei_vorgang  = "SELECT * FROM directory d INNER JOIN user_group_combi u WHERE ";
$datei_vorgang  .= " (d.access_group = u.groupID AND u.userID='".$userID."' ) OR d.creatorID='".$userID."'";
$datei_vorgang  .= " AND (d.level='".$lvl."' ";
$datei_vorgang  .= " AND d.depID='".$depID."' AND d.freigabe='1')";
$datei= mysql_query($datei_vorgang )or die(mysql_error());
ich habe mal die Abfrage ausgeben lassen das schaut dann so aus
SELECT * FROM directory d INNER JOIN user_group_combi u WHERE (d.access_group = u.groupID AND u.userID='39' ) OR d.creatorID='39' AND (d.level='1' AND d.depID='1' AND d.freigabe='1')
bei access_group und groupID passiert nichts ;/
 
Zuletzt bearbeitet:

McLoude

Highlander

AW: Verschachteltes SELECT liefert 0 zurück

Hmh, wie schon mal gesgt, ist jetzt nicht mein Steckenpferd, aber probiere mal so rum:

SELECT * FROM directory d INNER JOIN user_group_combi u WHERE u.userID='39' AND (d.access_group = u.groupID) OR d.creatorID='39' AND (d.level='1' AND d.depID='1' AND d.freigabe='1')
 

rey

Der Frager ;)

AW: Verschachteltes SELECT liefert 0 zurück

hm hat den selben Effekt wie bei mir.

Ich habe es nun anders umgesetzt mit while schleifen Problem nun er gibt Daten nicht aus
PHP:
$SQL_m_group = mysql_query("SELECT groupID FROM user_group_combi WHERE userID='".$userID."'");
while($m_group=mysql_fetch_object($SQL_m_group))
{
$m_GroupID = $m_group->groupID;

$SQL_dir_group = mysql_query("SELECT groupID FROM directory_group_combi WHERE groupID='".$m_GroupID."'");
while($d_group=mysql_fetch_object($SQL_dir_group))
{
$d_GroupID = $d_group->groupID;
$datei_vorgang = "SELECT * FROM directory WHERE (creatorID='".$userID."' OR access_group='".$d_GroupID."')";
$datei_vorgang .= " AND directory.`level`='".$lvl."' AND depID='".$depID."' AND freigabe='1'";
echo $datei_vorgang."<br /><br />"; 

}
}
das echo gibt aus
SELECT * FROM directory WHERE (creatorID='39' OR access_group='1') AND directory.`level`='1' AND depID='3' AND freigabe='1'

SELECT * FROM directory WHERE (creatorID='39' OR access_group='2') AND directory.`level`='1' AND depID='3' AND freigabe='1'
wenn ich die select nun in phpmyadmin manuell eintrage zeigt er mir aber einen Datensatz an.
Ich sollte vielleicht noch hinzufügen die erste select abfrage ist true und die zweite false, kann es sein das er sich nur den letzten sql befehl aus der while merkt?
Wenn ja wie könnt ich das ändern habe schon die mysql_query() überall eingefügt und es hat nichts geändert,
 
Zuletzt bearbeitet:

saila

Moderatorle

AW: Verschachteltes SELECT liefert 0 zurück

Hi,

ich bin zwar nicht direkt an meinem PC (dann würde ich dir den entsprechenden Query zeigen), aber mach dich schlau zu LEFT JOIN und dann musst du nich x mal aus einer Schleife die DB anfragen (was es egentl. zu vermeiden gilt) bzgl. Performance. Wenn ich heute gegen Abend noch Zeit habe, werde ich dir den Query zusammensetzen.
 

rey

Der Frager ;)

AW: Verschachteltes SELECT liefert 0 zurück

ich habe es mit left join versucht da bekomme ich aber das alte Problem das er mir den Datensatz mehrfach anzeigt.
PHP:
$datei_vorgang = "SELECT * FROM directory d LEFT JOIN user_group_combi u ON u.userID='".$userID."'";
$datei_vorgang .= " LEFT JOIN directory_group_combi g ON d.access_group=g.groupID WHERE ";
$datei_vorgang .= " d.`level`='".$lvl."' ";
$datei_vorgang .= " AND d.depID='".$depID."' AND d.freigabe='1'";

OK so geht es glaub ich werde es noch weiter testen

PHP:
$datei_vorgang = "SELECT DISTINCT d.`directoryID`,`dir_name`,`creatorID`,`level`,`Main_Directory`,`creationDate` FROM directory d LEFT JOIN user_group_combi u ON u.userID='".$userID."'";
$datei_vorgang .= " LEFT JOIN directory_group_combi g ON d.access_group=g.groupID WHERE ";
$datei_vorgang .= " d.`level`='".$lvl."' ";
$datei_vorgang .= " AND d.`depID`='".$depID."' AND d.`freigabe`='1'";
 
Zuletzt bearbeitet:

saila

Moderatorle

AW: Verschachteltes SELECT liefert 0 zurück

Na wenn du es fast hast, dann informiere dich noch zu DISTINCT oder GROUP BY ;)
 

saila

Moderatorle

AW: Verschachteltes SELECT liefert 0 zurück

Das kommt darauf an, was und wie genau das Ergebnis aussehen soll. Sowie ich (ohne den Query näher angesehen zu haben) das sehe, könntest du auch das ganze über Group By laufen lassen. Allerdings ist DISTINCT immer auf die Performance bezogen die bessere Wahl.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Keine Mitglieder online.

Statistik des Forums

Themen
118.619
Beiträge
1.538.363
Mitglieder
67.540
Neuestes Mitglied
Alex Weidner
Oben