【问题标题】:Sorting PHP Results of a query on two fields对两个字段的查询的 PHP 结果进行排序
【发布时间】:2022-02-05 09:32:20
【问题描述】:

我刚刚开始学习 php。我研究过的所有东西都引用了一个数组进行排序,但我不知道如何在这种情况下使它工作,因为我的一个字段不断变化,所以我无法创建一个固定的数组。请记住,我是菜鸟,所以请详细说明。

我想根据两个字段排序结果如何显示。

要排序的第一个字段应基于“SortOrder”,因为它与“TaskSubType”字段相关(在表单上显示为工单类型。TaskSubType 分配了以下值并将在数组中工作:

MSP = 1
DEDICATED = 2
REMOTE SUPPORT = 3
EXPEDITED = 4
EXPEDITED - $25 = 4
STANDARD = 5
STANDARD - $25 = 5

因此,如果工单类型 (TaskSubType) 被选为“专用”,那么它将被排序为“2”,如果“标准 - $25”被选为工单类型 (TaskSubType),那么它将被排序为“5” ”。

我要排序的第二个字段是票号(TicketNumber)字段。这个字段的值是不断变化的,因为我们每天都会创建新的工单,所以我不知道如何用数组对这个字段进行排序。

主要目标:我想根据我们分配给每种类型的数值(即我们的维修优先级)按工单类型对结果进行排序,然后在所有“专用”或“标准”中排序以处理其中的每张工单按创建顺序分组(每张新票加一)。

下面的代码是我到目前为止所做的工作,下面的网络链接显示了我的结果当前的显示方式:

显示结果的网页: https://fireytech.com/FireytechDatabase/hello.php

代码:

<?php

require '../../db_php/dbconnection.php';

$sql = "SELECT * FROM
            Tickets 
        Left JOIN
            Clients
        ON Tickets.CustomerNumber=Clients.CustomerNumber
        JOIN Contacts
        ON Contacts.ContactID=Clients.CustomerNumber
        JOIN Equipment
        ON Equipment.ContactID=Clients.CustomerNumber
        
        WHERE Equipment.PRINT = '-1' AND Contacts.DispatchContact = '-1' AND TicketStatus = 'Active' AND NOT TicketSubStatus = 'CUSTOMER PICKUP' AND NOT TaskSubType = 'ON-SITE'
";
$result = $conn->query($sql);

echo"<table border='1'>";
echo "<tr><td>Ticket Type</td><td>Ticket Number</td><td>Date Received</td><td>Last Edited</td><td>Last Name</td><td>Followup By</td><td>Sub Status</td><td>Repair Type</td><tr>";
if ($result->num_rows > 0){
while($row = $result->fetch_assoc() ){
    $dr= date("m/d/Y", strtotime($row['DateReceived']));
    $dl= date("m/d/Y", strtotime($row['DateLastEdited']));
    echo "<tr><td>{$row['TaskSubType']}</td><td>{$row['TicketNumber']}</td><td>{$dr}</td><td>{$dl}</td><td>{$row['ContactLast']}</td><td>{$row['FollowupBy']}</td><td>{$row['TicketSubStatus']}</td><td>{$row['ItemType']}</td></tr>";
    
}
} else {
    echo "0 records";
}

echo"</table>";

$conn->close();

?>

【问题讨论】:

  • 在这种情况下,您最好通过在 SQL 查询中添加 ORDER BY 子句来完成所需的排序。
  • 使用 ORDER BY Ticket 类型对 SQL 查询进行排序会更简单,OrderNumber 在 WHERE 之后
  • 如果您在选择查询中明确引用了属性名称,我们本可以为您提供粘贴的确切代码。顺便说一句,无论如何选择“*”通常都是不好的做法
  • 要排序的实际 mysql 字段名称在“Tickets”表中,称为“SortOrder”和“TicketNumber”
  • 您可以使用ORDER BY 进行操作。此子句出现在 SQL 查询的末尾。示例:ORDER BY salary DESC, last_name ASC;

标签: php html mysql sorting echo


【解决方案1】:

Murosadatul 给了我所需的清晰度。我尝试了 ORDER BY 命令,但没有意识到我需要将它放在 SQL 查询的末尾。下面的粗体是我将它放在我的代码中的位置,这样如果其他人遇到同样的问题,它就可以工作:

$sql = "SELECT * FROM
            Tickets 
        Left JOIN
            Clients
        ON Tickets.CustomerNumber=Clients.CustomerNumber
        JOIN Contacts
        ON Contacts.ContactID=Clients.CustomerNumber
        JOIN Equipment
        ON Equipment.ContactID=Clients.CustomerNumber
        
        WHERE Equipment.PRINT = '-1' AND Contacts.DispatchContact = '-1' AND TicketStatus = 'Active' AND NOT TicketSubStatus = 'CUSTOMER PICKUP' AND NOT TaskSubType = 'ON-SITE'

->->->->->->-> ORDER BY SortOrder, TicketNumber " ; $result = $conn->查询($sql);

【讨论】:

    猜你喜欢
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多