我有以下代码来显示发送,接收和接受简单的朋友系统的邀请。虽然循环的顺序基于关联数组php?
while ($friend = $q -> fetch(PDO::FETCH_ASSOC)) {
if ($friend['id'] == $user['id'] && $friend['friendAccept'] == 0) echo '<p>You have sent a request to be <a href="http://www.n.com/viewaccount?id=' . $friend['withID'] . '">' . $friend['username'] . '\'s</a> friend.</p>';
if ($friend['withID'] == $user['id'] && $friend['friendAccept'] == 0) echo '<p>You have recieved a request from <a href="http://www.n.com/viewaccount?id=' . $friend['withID'] . '">' . $friend['username'] . '</a>.</p>';
if ($friend['id'] == $user['id'] && $friend['friendAccept'] == 1) echo '<p>You are friends with <a href="http://www.n.com/viewaccount?id=' . $friend['withID'] . '">' . $friend['username'] . '</a>.</p>';
}
它会显示你有什么朋友,你发送了哪些朋友请求,以及接收了哪些朋友请求。我从一个mysql查询中获取所有这些信息。但唯一的问题是,它们并不是按顺序进行的,因为while循环在列表中迭代并执行它应该执行的任何操作。
有没有办法让他们仍然只使用一个查询?我的意思是指在一个列表中收到的所有请求,在一个列表中发送的请求以及在一个列表中的朋友。因为它是在他们按顺序他们从桌上被拉出的分钟。
查询...
$q = $dbc -> prepare("SELECT social.*, accounts.username FROM social INNER JOIN accounts WHERE social.withID = accounts.ID AND (social.id = ? OR social.withID = ?) AND type = 'friend'");
$q -> execute(array($user['id'], $user['id']));
什么*是*正确的顺序?你可以显示查询吗? – JJJ
好吧,现在编辑我的问题... – NovacTownCode
请注意,'PDOStatement'实现了['Traversable'](http://php.net/Traversable)接口,因此您可以使用'foreach'而不是' while'。它不会影响结果的顺序,但更具可读性(“对于序列的每个元素”而不是“当某些条件成立时”更好地描述了循环的作用)。 – outis