我很难写出这个问题。我有一个消息数据库,我想从每个对话中检索最新的2。如何在查询语法中加入限制以将每个唯一用户限制为仅两个?或者我必须选择all然后在fetch assoc中循环?查询看起来像这样:
$to = $_REQUEST['to'];
$lastid = $_REQUEST['lastId'];
$link = mysqli_connect('localhost', 'root', '', 'messagedb');
if ($link) {
$query = mysqli_query($link, "SELECT * FROM messages WHERE (toName='$to' OR fromName='$to') AND id>'$lastid' order by id desc");
$messages = array();
while ($row = mysqli_fetch_assoc($query)) {
if (!in_array($row['toName'], $messages) || !in_array($row['fromName'], $messages)) {
$messages[] = $row;
}
}
}
当然,这不起作用......它只是让所有东西都恢复了......而且我无法限制已有的行数。我希望有一个简单的查询解决方案。提前谢谢!
数据库看起来像这样:
id | fromName | toName | theMessage
------------------------------------------------------------
1 me joe some message to joe from me
2 john me message from john to me
3 sarah me message from sarah to me
4 joe me answer back to joe from me
5 me john answer back to john from me
6 me sarah answer back to sarah from me
//and so on...just conversations between people
所以在我的查询中,$ to是我,或者任何用户将使用它。我希望得到我/他们与每个人的对话,但在开始时将其限制在一定数量......所以以后他们可以加载更多。
答案 0 :(得分:0)
使用此代码:
SELECT * FROM messages WHERE (toName='$to' OR fromName='$to') AND id>'$lastid' order by id desc LIMIT number_of_rows
答案 1 :(得分:0)
首先复制并粘贴此而不是检查..
没有什么只是你在放Varaibles
$to = $_REQUEST['to'];
$lastid = $_REQUEST['lastId'];
$link = mysqli_connect('localhost', 'root', '', 'messagedb');
if ($link) {
$query = mysqli_query($link, "SELECT * FROM `messages` WHERE (toName='".$to."' OR fromName='".$to."') AND id>'".$lastid."' order by id desc");
$messages = array();
while ($row = mysqli_fetch_assoc($query)) {
if (!in_array($row['toName'], $messages) || !in_array($row['fromName'], $messages)) {
$messages[] = $row;
}
}
}
答案 2 :(得分:0)
有很多事情需要注意(比如你不依赖某些日期/时间字段来组织消息)。然后,正如您所说,最好的方法是使用PHP从每个地址组合中获取最后两行。 否则你也可以使用top clause,但我很难想到一种方法可以直接达到你想要的效果。