【发布时间】:2016-06-07 19:37:43
【问题描述】:
我正在我的 SQL 数据库上运行以下查询。我接下来要做的是从$result_users 中删除所有用户,这些用户的user_ID 也是receiverID 数组中的receiverID。为此,我创建了以下代码,但是我不确定我的方法是否正确。我在网上找到应该做的是unset($array[$key]),但是我找到的所有例子都是普通数组,而不是从SQL数据库中获取的,因此我不知道这种情况下如何进行
$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);
}
}
}
【问题讨论】:
-
你为什么不直接在 sql 中加入呢?
-
rtfm:php.net/mysqli_fetch_array 该函数从查询返回单行结果,而不是所有结果。您不是在循环所有行,而是在循环单行的字段。你真的需要了解sql连接。像这样并行运行两个查询效率非常低(即使你做得正确)。
-
@Reto 会不会是
SELECT users_with_fb.user_id, users_with_fb.sex, users_with_fb.latitude, users_with_fb.longitude FROM users_with_fb INNER JOIN match_instance ON users_with_fb.user_id !=match_instance.receiverID;之类的东西? -
是的,或者您可以使用这样的子查询:
SELECT user_id, sex, latitude, longitude FROM users_with_fb WHERE user_id NOT IN (SELECT receiverID FROM match_instance); -
如果我希望它不等于接收者 ID 或发送者 ID,它会是:
SELECT users_with_fb.user_id, users_with_fb.sex, users_with_fb.latitude, users_with_fb.longitude FROM users_with_fb WHERE user_id NOT IN (SELECT receiverID FROM match_instance) AND user_id NOT IN (SELECT senderID FROM match_instance);吗?