挑战针对html/PHP报告的MySQL查询
对于一个好的MySQL程序员来说,这里有一个挑战。 如果您能提供一些帮助,帮助我们创建一个显示在html/PHP页面中的MySQL报告,我们将不胜感激 我们知道如何收集和存储数据,并拥有PHP报告布局,但却不知道如何构造查询 我们有两个MySQL表——“访客”和“买家”挑战针对html/PHP报告的MySQL查询,php,html,mysql,Php,Html,Mysql,对于一个好的MySQL程序员来说,这里有一个挑战。 如果您能提供一些帮助,帮助我们创建一个显示在html/PHP页面中的MySQL报告,我们将不胜感激 我们知道如何收集和存储数据,并拥有PHP报告布局,但却不知道如何构造查询 我们有两个MySQL表——“访客”和“买家” 访客表–用于通过 标识销售代表和众多销售代表之一的特定URL 他们自己创造的营销代码 买家表–针对购买物品的人 访客可通过以下链接访问我们的网站,例如: www.sales_rep.website.com/index.php?m
www.sales_rep.website.com/index.php?marketing=code1/code2/code3
在“访客”表中,我们包括三个字段:
销售代表select v.rep
, v.Week1 , b.Week1
, v.Week2 , b.Week2
, v.Week3 , b.Week3
, v.Week4 , b.Week4
, v.Total, b.Total
from (
select rep,
, SUM(CASE @week WHEN 1 THEN 1 ELSE 0 END) as Week1
, SUM(CASE @week WHEN 2 THEN 1 ELSE 0 END) as Week2
, SUM(CASE @week WHEN 3 THEN 1 ELSE 0 END) as Week3
, SUM(CASE @week WHEN 4 THEN 1 ELSE 0 END) as Week4
, COUNT(*) as Total
from visitors
group by rep) as v
left join (select rep,
, SUM(CASE @week WHEN 1 THEN 1 ELSE 0 END) as Week1
, SUM(CASE @week WHEN 2 THEN 1 ELSE 0 END) as Week2
, SUM(CASE @week WHEN 3 THEN 1 ELSE 0 END) as Week3
, SUM(CASE @week WHEN 4 THEN 1 ELSE 0 END) as Week4
, COUNT(*) as Total
from visitors
group by rep) as b on v.rep = b.rep
为了确保清晰,在上表中,在第1周,8名访问者通过“code1/code2/”链接进入网站,其中5人购买了一些东西
我们试图从以下内容开始查询,但不知道该从何处开始:
$selected\u month=$\u POST['selected\u month']代码>
SELECT*FROM visitors internal JOIN buyer ON sales_rep,其中marketing_type=“URL”和sales_rep='$sales_rep'和date('Y-m')=$'selected_month'代码>
感谢您的时间和帮助。以下是我对您的问题的建议 首先,我需要根据日期字段找出周数,因此我在中使用了答案: 从现在起,我将上述结果称为@week,以使内容更具可读性:) 然后,我从其中一张表开始,试图了解一名销售代表每个月的访客数量:
select rep,
, SUM(CASE @week WHEN 1 THEN 1 ELSE 0 END) as Week1
, SUM(CASE @week WHEN 2 THEN 1 ELSE 0 END) as Week2
, SUM(CASE @week WHEN 3 THEN 1 ELSE 0 END) as Week3
, SUM(CASE @week WHEN 4 THEN 1 ELSE 0 END) as Week4
, COUNT(*) as Total
from visitors
group by rep
现在我们已经获得了这些信息,我们将对买家使用相同的信息,然后将这两个子查询的结果合并如下:
select v.rep
, v.Week1 , b.Week1
, v.Week2 , b.Week2
, v.Week3 , b.Week3
, v.Week4 , b.Week4
, v.Total, b.Total
from (
select rep,
, SUM(CASE @week WHEN 1 THEN 1 ELSE 0 END) as Week1
, SUM(CASE @week WHEN 2 THEN 1 ELSE 0 END) as Week2
, SUM(CASE @week WHEN 3 THEN 1 ELSE 0 END) as Week3
, SUM(CASE @week WHEN 4 THEN 1 ELSE 0 END) as Week4
, COUNT(*) as Total
from visitors
group by rep) as v
left join (select rep,
, SUM(CASE @week WHEN 1 THEN 1 ELSE 0 END) as Week1
, SUM(CASE @week WHEN 2 THEN 1 ELSE 0 END) as Week2
, SUM(CASE @week WHEN 3 THEN 1 ELSE 0 END) as Week3
, SUM(CASE @week WHEN 4 THEN 1 ELSE 0 END) as Week4
, COUNT(*) as Total
from visitors
group by rep) as b on v.rep = b.rep
这应该是你要找的
以下是针对您的情况更新的与上面相同的代码:
select v.rep
, v.Week1 , b.Week1
, v.Week2 , b.Week2
, v.Week3 , b.Week3
, v.Week4 , b.Week4
, v.Total, b.Total
from (
select rep
, SUM(CASE WEEK(the_date, 5) -
WEEK(DATE_SUB(the_date, INTERVAL DAYOFMONTH(the_date) - 1 DAY), 5) + 1
WHEN 1 THEN 1 ELSE 0 END) as Week1
, SUM(CASE WEEK(the_date, 5) -
WEEK(DATE_SUB(the_date, INTERVAL DAYOFMONTH(the_date) - 1 DAY), 5) + 1
WHEN 2 THEN 1 ELSE 0 END) as Week2
, SUM(CASE WEEK(the_date, 5) -
WEEK(DATE_SUB(the_date, INTERVAL DAYOFMONTH(the_date) - 1 DAY), 5) + 1
WHEN 3 THEN 1 ELSE 0 END) as Week3
, SUM(CASE WEEK(the_date, 5) -
WEEK(DATE_SUB(the_date, INTERVAL DAYOFMONTH(the_date) - 1 DAY), 5) + 1
WHEN 4 THEN 1 ELSE 0 END) as Week4
, COUNT(*) as Total
from visitors
where sales_rep = '$sales_rep' AND date('Y-m') = $'chosen_month'
group by rep ) as v
left join (
select rep
, SUM(CASE WEEK(the_date, 5) -
WEEK(DATE_SUB(the_date, INTERVAL DAYOFMONTH(the_date) - 1 DAY), 5) + 1
WHEN 1 THEN 1 ELSE 0 END) as Week1
, SUM(CASE WEEK(the_date, 5) -
WEEK(DATE_SUB(the_date, INTERVAL DAYOFMONTH(the_date) - 1 DAY), 5) + 1
WHEN 2 THEN 1 ELSE 0 END) as Week2
, SUM(CASE WEEK(the_date, 5) -
WEEK(DATE_SUB(the_date, INTERVAL DAYOFMONTH(the_date) - 1 DAY), 5) + 1
WHEN 3 THEN 1 ELSE 0 END) as Week3
, SUM(CASE WEEK(the_date, 5) -
WEEK(DATE_SUB(the_date, INTERVAL DAYOFMONTH(the_date) - 1 DAY), 5) + 1
WHEN 4 THEN 1 ELSE 0 END) as Week4
, COUNT(*) as Total
from buyers
where marketing_type = "URL" AND sales_rep = '$sales_rep' AND date('Y-m') = $'chosen_month'
group by rep) as b on v.rep = b.rep
无论你在这里做什么,都会从中受益。将
$\u POST
值直接注入到查询中是一个非常糟糕的主意。感谢您提供的信息。我刚刚开始学习如何防范sql注入。在PHP中实际创建变量时,我们将使用mysql\u real\u escape\u string函数来保护数据。这篇文章来自一个下拉菜单,所以这应该足以保护它,对吗?不过,您必须对任何和所有值使用mysql\u real\u escape\u string
。要确保您拥有每一个查询,这可能是一个挑战,这就是为什么使用而不是不推荐的mysql\u查询
接口的原因。请务必使用测试工具测试您的应用程序,以确保您没有完全暴露。再次感谢。我一定会仔细阅读PDO。我们的大部分代码都是使用mysql\u query
编写的。它和PDO之间的语法有多不同?感谢您的回复。代码似乎正在运行,但我无法获取任何要显示的数据。我使用while循环从查询中提取变量,并且没有收到来自PHP或MySQL的任何错误。我应该使用另一种方法来提取数据吗?首先,您应该尝试直接在sql中运行查询——为此,请使用Phpmyadmin或Mysql Workbench。一旦确定结果符合预期,就应该尝试在代码中使用查询。此外,我看到我对日期列使用了不同的名称:“the_date”而不是示例中的“date”。您使用的条件“date('Y-m')=$'Selected_month'”将永远不会起作用,因为它不会按date
列过滤-此处date
是一个函数。非常感谢!在比较之前,我将日期更改为日期\格式函数。经过一点清理,一切都很顺利。