【发布时间】:2012-11-07 19:08:23
【问题描述】:
对于优秀的 MySQL 编码器来说,这是一个挑战。 我们将非常感谢有关查询的帮助,以创建在 html/PHP 页面中显示的 MySQL 报告。
我们知道如何收集和存储数据,并拥有 PHP 报表布局,但不知道如何构造查询。
我们有两个 MySQL 表——“visitors”和“buyers”。
- Visitors 表 – 用于通过访问我们网站的访问者 标识 sales_rep 和众多之一的特定 URL 他们自己创建的营销代码。
- Buyers 表 – 为那些买东西的人准备的。
访问者可以通过以下链接访问我们的网站,例如:
www.sales_rep.website.com/index.php?marketing=code1/code2/code3
在“访问者”表中,我们包含三个字段:
- sales_rep
- 日期
- marketing_CODE –(在这种情况下是字符串中的“code1/code2/code3”,但每个 sales_rep 可以根据他们的广告活动有多个 marketing_CODES;例如“code1a/codeTX/codeM2”和“market- z/ad-123")
当访问者购买商品时,我们会将其添加到“买家”表中,其中包括:
- sales_rep
- 日期
- marketing_TYPE –(可以是“URL”、“referral”或其他类型)
- marketing_VALUE –(如果 marketing_TYPE 是 URL,则为 marketing_CODE)
我们需要查看每个特定销售代表的报告,在任何指定月份,按营销代码排序,仅针对 marketing_TYPE == "URL"。
此报告需要显示每个 marketing_CODE 的访客和买家活动的每周细分,如下所示:
为清楚起见,在上表中,在第 1 周,8 位访问者通过带有“code1/code2/”的链接进入网站,其中 5 人购买了东西。
我们尝试从以下内容开始查询,但不知道从哪里开始:
$chosen_month = $_POST['chosen_month'];SELECT * FROM visitors INNER JOIN buyers ON sales_rep WHERE marketing_type = "URL" AND sales_rep = '$sales_rep' AND date('Y-m') = $'chosen_month' ;- 使用while 语句,我们将为找到的每条记录生成表格单元格。使用它,我们知道如何列出每条记录,但我们无法弄清楚如何显示一次非不同记录,显示它们的计数,然后显示不同的记录。
感谢您的时间和帮助。
【问题讨论】:
-
无论您在这里做什么,都会受益于一些proper SQL escaping。将
$_POST值直接注入您的查询是一个非常糟糕的想法。 -
感谢您的信息。我刚刚开始学习如何防止 sql 注入。在 PHP 中实际创建变量时,我们将使用 mysql_real_escape_string 函数来保护数据。该帖子来自一个下拉菜单,所以这应该足以保护它,对吧?
-
您必须在任何和所有值上使用
mysql_real_escape_string。确保您拥有每一个可能是一个挑战,这就是为什么使用PDO 而不是已弃用的mysql_query接口。请务必使用 SQL injection testing tool 测试您的应用,以确保您没有完全暴露。 -
再次感谢。我一定会阅读 PDO。我们的大部分代码都是使用
mysql_query编写的。它和 PDO 的语法有何不同?