【问题标题】:Ordering retrieved information from a database对从数据库中检索到的信息进行排序
【发布时间】:2011-07-25 18:57:24
【问题描述】:

我正在通过使用嵌套的 while 循环从我的数据库中检索信息来创建提要(有更好的方法吗?)。

我有一张名为 users 的表,其中包含所有名称。另一个表称为消息,其中包含消息、发布消息的用户和时间戳。

$userQuery = mysql_query("SELECT name FROM users");
while ($user = mysql_fetch_array($userQuery, MYSQL_NUM)) {
    $messageQuery = mysql_query("SELECT message FROM messages WHERE user = $user ORDER BY timestamp DESC");
    while ($message = mysql_fetch_array($messageQuery, MYSQL_NUM)) {
        echo "$user[0]: $message[0]";
    }
}

问题是它没有按时间戳排序,我不知道它是如何排序的。我已经尝试了带有 UNIX 时间戳的 timestamp、datetime 和 int 类型。

编辑:我应该补充一点,用户和消息匹配得很好,只是排序不起作用。

【问题讨论】:

    标签: php mysql timestamp unix-timestamp


    【解决方案1】:

    我猜你让你的用户按或多或少的随机顺序排列,并且“在”一个用户内排序没问题?!

    使用:

    $result = mysql_query('select users.name,messages.message from messages join users on (users.name=messages.user) order by messages.timestamp');
    while($row = mysql_fetch_row($result))
        echo "$row[0]: $row[1]";
    

    这应该会给你一个有序的结果(至少如果你有一个名为 messages.timestamp 的列。检查名称 ;-))。一站式查询...

    【讨论】:

    • ;) 你速度更快,删除了我的答案
    【解决方案2】:

    对于查询,您可以创建一个联接

    SELECT u.name as name, m.message as message
    FROM users u inner join messages m
    on u.user = m.user
    order by 
    m.timestamp DESC
    

    至于第二部分,我认为你的能力没有任何问题。也许您可以发布一些数据样本,看看是否有任何不同。

    【讨论】:

    • name.u, message.m 你确定吗?也许u.namem.message
    • 哈哈.. 是的。我把第二部分做对了,第一部分做错了。我不应该在半睡半醒的时候回答问题 :) 感谢您指出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多