Table1
id | username | request
--------|--------------|----------
1 | user 1 | blah blah
2 | user 1 | blah2
3 | user 1 | blah3
4 | user 1 | blah4
5 | user 2 | blah1
Table2
id | username | requestID
--------|--------------|------------
1 | user 2 | 1
Die zurückgegebenen Ergebnisse für ‚user 2‘ sollte sein:PHP PDO MYSQL Verbindung Select-Anweisungen
table1.id = 2
table1.id = 3
table1.id = 4
ich wählen erstellen müssen, die alle IDs aus der ersten Tabelle wählen, wo der Benutzername <> $ Benutzername (das ist einfach genug).
Ich brauche auch diese gegen Tabelle 2 abgestimmt, um sicherzustellen, dass der $ username nicht bereits ID aus Tabelle 1 übereinstimmenden RequestID aus Tabelle 2 (das ist, wo ich keine Ahnung, was zu tun ist) gesagt haben.
Ich weiß, wie man eine innere Verbindung macht, aber das scheint ein wenig komplexer als das. Mache ich zwei verschiedene Selects zusammen? Wie mache ich das?
Bestehende Code:
$stmt=$db->prepare("SELECT id FROM table1 WHERE username <> :user");
$stmt->bindParam(':user', $username);
$stmt->execute();
$row = $stmt->fetch();
Hinzufügen
ich versucht habe, in Frage zu stellen eine innere Verknüpfung und es gibt nur einen Fehler auf der zweiten WHERE-Klausel: Unknown column 'table2.username' in ' where clause '.. aber die Tabelle sieht eindeutig eine Username-Spalte.
$stmt=$db->prepare("SELECT table1.id
FROM table1
INNER JOIN table2
ON table1.id = table2.requestID
WHERE table1.username <> 'user 1'
AND table2.username = 'user 1'");
MEHR ADDING klar, zu VERSUCHEN zu MACHEN MEHR
Ich glaube nicht, ein einfaches INNER JOIN mein Problem lösen wird, wie ich ursprünglich angegeben. Ich muss zuerst die Ergebnisse von Tabelle1 erhalten. Dann brauche ich diese Ergebnisse gegen table2 getestet, so dass NUR die Ergebnisse von table1, die vom aktuellen Benutzer NICHT erstellt wurden, zurückgegeben werden, und von diesen zurückgegebenen Ergebnissen sollten nur diejenigen zurückgegeben werden, die der Benutzer nicht in table2 aufgelistet hat.
Also ich vermute, ich werde nur zwei völlig separate Datenbankfunktionen zu tun haben.
$stmt=$db->prepare("SELECT id FROM table1 WHERE username <> :user");
$stmt->bindParam(':user', $username);
$stmt->execute();
$row = $stmt->fetch();
$id = $row['id'];
$stmt=$db->prepare("SELECT requestID FROM table1 WHERE username = :user");
$stmt->bindParam(':user', $username);
$stmt->bindParam(':id', $id);
$stmt->execute();
$rid = $stmt->fetch();
if $rid !== $id { //perform function } else {}
ich dachte, dass es eine Art und Weise ausgewählte Aussagen zur Verbindung war, damit ich nicht 2 verschiedene Anrufe zu tun hatte, aber vielleicht falsch ich bin. Wie auch immer, ich sehe nicht, wie innerer Join dies erreichen wird ... aber ich bin offen für das Lernen.
NOCH MEHR UPDATES VERSUCHT, machen dies noch deutlicher
table1.id = 1 sollte nicht überein, da der Benutzer 2 eine table2.requestID hat die table1.id übereinstimmt; table1.id = 5 sollte nicht übereinstimmen, da Benutzer 2 der aufgelistete Benutzername für table1.id = 5 ist
Die anderen 3 Spalten sollten jedoch zurückkehren.
Verwenden Sie einfach innere Join ich denke, es wird funktionieren –
Wie sollte Ihre Ausgabe mit Tabelle1 und Tabelle2 zeigen Beispielausgabe zu wir – ashkufaraz
Ich aktualisierte den Status der Frage zu versuchen, zu zeigen, dass ich Inner Join versucht habe und es funktioniert nicht. – Bruce