繁体   English   中英

如何使用php以特定顺序显示从mysql db检索到的数据

[英]How do I display data retrieved from mysql db in a specific order using php

我试图显示问题以及用户按照特定顺序(而不是ASC或DESC)而是由“ question_order”列定义的答案。

我在mysql数据库中有以下表格:

questions (qid, question_text)
answers   (aid, uid, answer)
usermeta  (userid, question_order)

"questions" table contains the questions
"answers" table contains every users answers to all questions
"usermeta" table contains the sort order for the questions in "question_order".

每个用户的“ question_order”是唯一的,并且在数据库中是管道分隔列表。 (即:85 | 41 | 58 | 67 | 21 | 8 | 91 | 62等)

PHP版本5.3.27

如果使用完全不同的方法可以更好地完成整个过程,请告诉我。

我的PHP能力有限。 话虽如此,以下是我玩了几个小时后现在所拥有的...

    $sql = "
        SELECT
                *
        FROM
                ".USERMETA_TABLE."
        WHERE
                userid = {$userid}
    ";

    $result = $db->query($sql) OR sql_error($db->error.'<br />'.$sql);
    $row = $result->fetch_assoc();

    $order_array = explode('|', $row['question_order']);

    $sql = "
        SELECT
                *
        FROM
                ".QUESTIONS_TABLE."
    ";

    $result = $db->query($sql) OR sql_error($db->error.'<br />'.$sql);
    $row = $result->fetch_assoc();


    // my attempt at sorting the questions. the $order_array 
    // does not have a unique id so I am kind of lost as to 
    // how to make this work

    usort($myArray, function($order_array, $row) {
        return $order_array - $row['qid'];
    });


    $sql = "
        SELECT
                *
        FROM
                ".QUESTIONS_TABLE."
    ";

    $result = $db->query($sql) OR sql_error($db->error.'<br />'.$sql);

    while ( $row = $result->fetch_assoc() )
    {
        $sql = "
            SELECT
                    *
            FROM
                    ".ANSWERS_TABLE."
            WHERE
                    uid = {$userid}
                AND
                    qid = ".$row['qid']."
            LIMIT
                    1
        ";

        $result2 = $db->query($sql) OR sql_error($db->error.'<br />'.$sql);
        $row2 = $result2->fetch_assoc();

        echo '      <p>'.$row['question_text'].'</p>'."\n";
        echo '      <p>'.$row2['answer'].'</p>'."\n";
    }

从数据库检索数据时,请过滤掉数据。

使用: SELECT * FROM [TABLE_NAME] ORDER BY qid DESC

然后,在PHP中,您可以使用会话变量并相应地修改值。

如果要使用ID订购,可以使用

SELECT * FROM [TABLE_NAME] ORDER BY qid DESC

这将以降序排列如果要以升序使用ASC

我继续并通过添加一个表来存储问题编号,用户排序顺序和学生用户ID来更改数据库:

student_id, sort_order, question_id
1               1               8
1               2               2
1               3               97

然后可以使用以下语句将其全部选中:

SELECT q.* 
FROM 
questions q
JOIN questions_sorting_order qso
ON q.id = qso.question_id
ORDER BY qso.sort_order
WHERE qso.student_id = $student_id

...效果很好。

感谢FuzzyTree在以下方面的帮助: 我如何根据唯一和预定的顺序(而不是asc或desc)对mysql数据库中的数据进行排序

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM