gpt4 book ai didi

php - 在 PHP 中显示唯一的 MySQL 数据

转载 作者:行者123 更新时间:2023-11-30 23:16:52 25 4
gpt4 key购买 nike

我有一个数据库,用作在线资源调度。数据库设置有以下表(注意:表名是第一个要点,列名在每个表名下缩进):

  • 顾问
    • consultant_id
    • 姓名
    • 我的名字
    • 用户名
    • 密码
  • 客户
    • client_id
    • 客户姓名
  • 事件类型
    • 事件编号
    • 事件类型
    • 事件全名
  • billing_status
    • billing_id
    • 账单类型
  • 日期(请注意,此表中列出了所有可用日期,但有些日期无法用于我的目的,因此并非每天列在这里。将其视为可用天数的 list 。)
    • 日期_id
    • 日期
  • 日历事件
    • calendar_event_id
    • consultant_id
    • client_id
    • 事件编号
    • billing_id
    • 日期_id

每次为顾问分配一个事件时,它都会被添加到 calendar_event 表中,并创建一个新的 calendar_event_id

在我的 PHP 页面上,我有以下查询:

$query = "SELECT * FROM billing_status, calendar_event, client, consultant, dates, event_type  WHERE (consultant.consultant_id = calendar_event.consultant_id AND client.client_id = calendar_event.client_id AND event_type.event_id = calendar_event.event_id AND billing_status.billing_id = calendar_event.billing_id AND dates.date_id = calendar_event.date_id) ORDER BY calendar_event.date_id";
$consultantresults = mysql_query($query) or die ('Query failed: ' . mysql_error());

然后我将显示输出如下:

echo "<html><head></head><body><table>"; 
while ($consultantresult=mysql_fetch_array($consultantresults))
{
$consultantname = $consultantresult[f_name];
$consultantname .= " ";
$consultantname .= $consultantresult[l_name]; // to display the first and last names together

echo "<tr style=\"background-color:#eee;\"><th>Date</th><th>" . $consultantname . "</th></tr>
<tr><td>" . date('D M d, Y', strtotime($consultantresult[date])) . "</td><td>" . $consultantresult[client_name] . " " . $consultantresult[event_type] . "</td></tr>";
}
echo "</table></body></html>";
} else {
header("Location: /index.php");
exit;
}

这设法显示了 calendar_event 表中包含的所有记录,但每条记录都显示在自己的行中,例如:

<table>
<tr style="background-color:#eee;"><th>Date</th><th>Consultant #1</th></tr>
<tr><td>Mon Aug 05, 2013</td><td>Client A</td></tr>
<tr style="background-color:#eee;"><th>Date</th><th>Consultant #2</th></tr>
<tr><td>Mon Aug 05, 2013</td><td>Client B</td></tr>
<tr style="background-color:#eee;"><th>Date</th><th>Consultant #3</th></tr>
<tr><td>Mon Aug 05, 2013</td><td>Client C</td></tr>
<tr style="background-color:#eee;"><th>Date</th><th>Consultant #1</th></tr>
<tr><td>Tue Aug 06, 2013</td><td>Client D</td></tr>
</table>

您会注意到前三个条目的日期相同(每次重复日期),并且第一个和最后一个条目是同一位顾问的(姓名也重复)。

相反,我希望在表格的顶部标题行中显示每个唯一顾问的姓名,并在第一列中显示每个唯一的日期。第一行/第一列中不应重复任何名称或日期。例如:

<table>
<tr style="background-color:#eee;"><th>Date</th><th>Consultant #1</th><th>Consultant #2</th><th>Consultant #3</th></tr>
<tr><td>Mon Aug 05, 2013</td><td>Client A</td><td>Client B</td><td>Client C</td></tr>
<tr><td>Tue Aug 06, 2013</td><td>Client D</td><td>&nbsp;</td><td>&nbsp;</td></tr>
</table>

顾问可能不会在特定的一天被分配,所以那天对他们来说是空白的(我使用   作为占位符)。

我还需要为最终用户提供一种只显示特定日期的方法,而不是整个 calendar_event 表中的每个条目。

有什么想法可以修改上面的代码以使其正确显示输出吗?

最佳答案

你听说过SQL JOIN吗? ?

使用这个你的查询应该是:

SELECT * 
FROM calendar_event ce
LEFT JOIN billing_status bs ON ce.billing_id = bs.billing_id
LEFT JOIN client cl ON ce.client_id = cl.client_id
LEFT JOIN consultant co ON ce.consultant_id = co.consultant_id
LEFT JOIN dates dt ON ce.date_id = dt.date_id
LEFT JOIN event_type et ON ce.event_id et.event_it
ORDER BY ce.date_id

此外,如果您查看 dates 表中的日期,您会发现每个数据本身都应该是唯一的,因此没有必要也有唯一的主键 date_id 而只有 date 应该是主列。

关于php - 在 PHP 中显示唯一的 MySQL 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17237384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com