2016-06-07 19 views
0

Ich führe die folgenden Abfragen auf meine SQL-Datenbanken. Als nächstes möchte ich alle Benutzer von $result_users entfernen, deren user_ID ebenfalls ein receiverID im $result_sender Array ist. Dazu habe ich den folgenden Code erstellt, bin mir aber nicht sicher, ob meine Vorgehensweise korrekt ist. Ich habe online gefunden, dass unset($array[$key]) ist, was getan werden soll, aber alle Beispiele, die ich normale Arrays gefunden wurden, und nicht von SQL-Datenbanken erhalten, also ich bin mir nicht sicher, wiePHP Entfernen von Wert innerhalb forEach Schleife von mysqli_fetch_array

in dieser Situation geht
$retrieve_potential_matches_sender = mysqli_query($conn,"SELECT senderID, receiverID FROM match_instance WHERE senderID = '$sender'"); 
$retrieve_all_users = mysqli_query($conn,"SELECT user_id, sex, latitude, longitude FROM users_with_fb"); 
$result_sender = mysqli_fetch_array($retrieve_potential_matches_sender); 
$result_users = mysqli_fetch_array($retrieve_all_users); 

if count($result_sender) > 0 { 

foreach ($result_sender as $sendingID) { 

    foreach ($result_users as $userValue) { 

    if ($userValue["user_id"] == $sendingID["receiverID"] { 

     unset($userValue); 
    } 
    } 
} 
+0

Warum müssen Sie nicht nur in SQL JOIN tun? – Reto

+0

rtfm: http://php.net/mysqli_fetch_array Die Funktion gibt eine einzelne Reihe von Ergebnissen aus der Abfrage zurück, nicht alle Ergebnisse. Wenn Sie nicht alle Zeilen durchlaufen, durchlaufen Sie die Felder einer EINZEL-Zeile. und Sie müssen wirklich über SQL-Joins lernen. Das Ausführen von zwei Abfragen parallel ist sehr ineffizient (sogar Sie haben es richtig gemacht). –

+1

@Reto würde es so etwas wie SELECT users_with_fb.user_id, users_with_fb.sex, users_with_fb.latitude, users_with_fb.longitude VON users_with_fb INNER match_instance ON users_with_fb.user_id JOIN sein = match_instance.receiverID;! '? – Alk

Antwort

1

Sie könnten eine Sub-Abfrage wie folgt tun:

SELECT user_id, sex, latitude, longitude FROM users_with_fb WHERE user_id NOT IN (SELECT receiverID FROM match_instance);

0

Sie sind Unscharfschalten der Variablen, die von der Schleife verwendet wird, nicht der Wert im tatsächlichen Array. Dies sollte sein, was Sie suchen:

foreach ($result_sender as $sendingID) { 

    foreach ($result_users as $key => $userValue) { 

    if ($userValue["user_id"] == $sendingID["receiverID"] { 

     unset($result_users[$key]); 
    } 
    } 
} 
Verwandte Themen