Php 来自MySQL的路径报告
我有一个数据库表,它跟踪通过php脚本启动的所有页面视图。该表如下所示:Php 来自MySQL的路径报告,php,mysql,Php,Mysql,我有一个数据库表,它跟踪通过php脚本启动的所有页面视图。该表如下所示: SELECT ( SELECT p5.page_url FROM pageviews p5 WHERE p5.session_id = t.session_id AND p5.rowid < t.rowid ORDER BY p5.rowid DESC LIMIT 4,1 ) AS back_5_p
SELECT ( SELECT p5.page_url
FROM pageviews p5
WHERE p5.session_id = t.session_id
AND p5.rowid < t.rowid
ORDER BY p5.rowid DESC
LIMIT 4,1
) AS back_5_page_url
, ( SELECT p4.page_url
FROM pageviews p4
WHERE p4.session_id = t.session_id
AND p4.rowid < t.rowid
ORDER BY p4.rowid DESC
LIMIT 3,1
) AS back_4_page_url
, ( SELECT p3.page_url
FROM pageviews p3
WHERE p3.session_id = t.session_id
AND p3.rowid < t.rowid
ORDER BY p3.rowid DESC
LIMIT 2,1
) AS back_3_page_url
, ( SELECT p2.page_url
FROM pageviews p2
WHERE p2.session_id = t.session_id
AND p2.rowid < t.rowid
ORDER BY p2.rowid DESC
LIMIT 1,1
) AS back_2_page_url
, ( SELECT p1.page_url
FROM pageviews p5
WHERE p1.session_id = t.session_id
AND p1.rowid < t.rowid
ORDER BY p1.rowid DESC
LIMIT 0,1
) AS back_1_page_url
, t.page_url
, t.session_id
, t.row_id
FROM pageviews t
WHERE t.page_url = 'X'
- 罗维德(AI)
- 用户id
- 网页地址
- 叶锡安
- 会话号
有线索吗?我一直在寻找一个报告工具来帮助我建立这些细分市场,但我没有想出任何东西,所以我试图看看是否有一种方法可以直接查询它。我希望避免使用其他工具进行收集,如果可以的话,只需查询我的数据库。这样做是否能满足您的需要(警告-未测试):
一个想法是在选择列表中使用相关子查询 如果我理解了规范,那么查询的参数(parameter)将是一个特定的“page\u url”,在规范中用“X”表示 外部查询将检索该页面的行。选择列表中的子查询将获得会话中的上一个
页面url
。(我们看不到日期时间/时间戳,因此后续页面视图需要依赖'rowid'值的增加(即,以前的页面视图将具有'row_id'的“较低”值)
大概是这样的:
SELECT ( SELECT p5.page_url
FROM pageviews p5
WHERE p5.session_id = t.session_id
AND p5.rowid < t.rowid
ORDER BY p5.rowid DESC
LIMIT 4,1
) AS back_5_page_url
, ( SELECT p4.page_url
FROM pageviews p4
WHERE p4.session_id = t.session_id
AND p4.rowid < t.rowid
ORDER BY p4.rowid DESC
LIMIT 3,1
) AS back_4_page_url
, ( SELECT p3.page_url
FROM pageviews p3
WHERE p3.session_id = t.session_id
AND p3.rowid < t.rowid
ORDER BY p3.rowid DESC
LIMIT 2,1
) AS back_3_page_url
, ( SELECT p2.page_url
FROM pageviews p2
WHERE p2.session_id = t.session_id
AND p2.rowid < t.rowid
ORDER BY p2.rowid DESC
LIMIT 1,1
) AS back_2_page_url
, ( SELECT p1.page_url
FROM pageviews p5
WHERE p1.session_id = t.session_id
AND p1.rowid < t.rowid
ORDER BY p1.rowid DESC
LIMIT 0,1
) AS back_1_page_url
, t.page_url
, t.session_id
, t.row_id
FROM pageviews t
WHERE t.page_url = 'X'
这假定页面url不包含制表符(0x09)字符
last_5_pages
列是一个以制表符分隔的页面url列表,首先是最近的页面视图,然后是以前查看的页面url,等等
将这些列拆分为单独的列将需要更多的工作,将查询包装在内联视图中,并结合子字符串索引(可能是反向),以及一个计算列表中页面url数量的函数……这在SQL中有点麻烦。如果我采用这种方法,我更愿意从选项卡中解析页面url客户机中的分隔列表。以下是我最后做的事情-效果很好
<?php
require_once 'init.php';
// ----------------- PAGE PATH REPORT
$html = "<table>";
$html .= "<tr><th align='left'>PAGE PATHS HITTING GOAL.PHP</th></tr>";
$paths = array();
$sql = "SELECT cookie_uid, page_url FROM pageviews ORDER BY rowid";
$result = mysqli_query($conn, $sql);
$got_rows = mysqli_num_rows($result);
if ($got_rows) {
while ($row = mysqli_fetch_array($result)) {
// Create an array for the cookie_uid if it doesn't exist yet
if ( ! array_key_exists($row['cookie_uid'], $paths) || ! is_array($paths[$row['cookie_uid']])) {
$paths[$row['cookie_uid']] = [];
}
// Add to the array now that we know it exists
array_push($paths[$row['cookie_uid']], $row['page_url']);
}
foreach ($paths as $session => $page) {
$html .= "<tr>";
$html .= '<td>' . implode(' ---> ', $page) . "</td>";
$html .= "</tr>";
}
} else {
$html .= '<td colspan="2">No results</td>' . "";
}
$html .= "</table>";
echo $html;
if (!mysqli_query($conn,$sql)) {
die('Error: ' . mysqli_error($conn));
}
// ----------------- ALL PAGES REPORT
echo "</br></br>";
echo "<tbody><table>";
echo "<tr><th align='left'>UNIQUE PAGES</th></tr>";
$sql = "SELECT distinct page_url FROM pageviews";
$allpages = mysqli_query($conn, $sql);
foreach ($allpages as $page){
echo "<tr>";
echo "<td>" . $page['page_url'] . "</td>";
echo "</tr>";
}
echo "</tbody></table>";
mysqli_close($conn);
error_reporting(E_ALL);
?>
我来试一试。如何在php中回显结果?
<?php
require_once 'init.php';
// ----------------- PAGE PATH REPORT
$html = "<table>";
$html .= "<tr><th align='left'>PAGE PATHS HITTING GOAL.PHP</th></tr>";
$paths = array();
$sql = "SELECT cookie_uid, page_url FROM pageviews ORDER BY rowid";
$result = mysqli_query($conn, $sql);
$got_rows = mysqli_num_rows($result);
if ($got_rows) {
while ($row = mysqli_fetch_array($result)) {
// Create an array for the cookie_uid if it doesn't exist yet
if ( ! array_key_exists($row['cookie_uid'], $paths) || ! is_array($paths[$row['cookie_uid']])) {
$paths[$row['cookie_uid']] = [];
}
// Add to the array now that we know it exists
array_push($paths[$row['cookie_uid']], $row['page_url']);
}
foreach ($paths as $session => $page) {
$html .= "<tr>";
$html .= '<td>' . implode(' ---> ', $page) . "</td>";
$html .= "</tr>";
}
} else {
$html .= '<td colspan="2">No results</td>' . "";
}
$html .= "</table>";
echo $html;
if (!mysqli_query($conn,$sql)) {
die('Error: ' . mysqli_error($conn));
}
// ----------------- ALL PAGES REPORT
echo "</br></br>";
echo "<tbody><table>";
echo "<tr><th align='left'>UNIQUE PAGES</th></tr>";
$sql = "SELECT distinct page_url FROM pageviews";
$allpages = mysqli_query($conn, $sql);
foreach ($allpages as $page){
echo "<tr>";
echo "<td>" . $page['page_url'] . "</td>";
echo "</tr>";
}
echo "</tbody></table>";
mysqli_close($conn);
error_reporting(E_ALL);
?>