【问题标题】:Show results from different queries on one page, either or, not all at the same time在一个页面上显示来自不同查询的结果,或者不是同时显示所有结果
【发布时间】:2009-12-11 16:54:47
【问题描述】:

不确定这是否是表达我正在尝试做的事情的最佳方式。如下:

我希望用户能够根据三个不同的表从我的数据库中显示结果,一次一个。

我已准备好查询,但只想根据用户点击的内容一次在页面上显示一个结果。查询基于 3 个不同的表。有今日表、本周表和本月表。

因此,当用户单击“今天”时,我想显示“今天”表中的结果。当他们单击本周时,我希望结果切换为来自本周表。我假设这可以通过 PHP 中的简单 if-then 逻辑来完成。

这是我从 Today 表中调用的方式:

<?php

global $wpdb;
$result = $wpdb->get_results('SELECT name, count FROM wp_celebcount_today');
foreach($result as $row) {
echo '<a href="http://www.celebrything.com/?s=' .
    urlencode($row->name) . '&search=Search">' . $row->name .
    '</a> - ' . $row->count . ' Posts<br/>';}


?>

我会像这样从本周表中调用:

<?php

global $wpdb;
$result = $wpdb->get_results('SELECT name, count FROM wp_celebcount_thisweek');
foreach($result as $row) {
echo '<a href="http://www.celebrything.com/?s=' .
    urlencode($row->name) . '&search=Search">' . $row->name .
    '</a> - ' . $row->count . ' Posts<br/>';}


?>

此查询当前正在从页面加载运行。如何插入逻辑以使其通过单击“今天”、“本周”或“本月”运行?


好的 - 感谢您到目前为止的帮助!我有这个:

<div id="sidebar">

<div class="post">
<h2>

<font color="#333333">Most Popular Celebrities</font><br>
<font color="#333333">in last 24 hours</font>
<br>
<br>

<a href="page.php?table=today">Today</a>
<a href="page.php?table=week">Week</a>
<a href="page.php?table=month">Month</a>

<?php
if (!in_array($table, array('today', 'week', 'month')) {
  return false;
}

global $wpdb;
$result = $wpdb->get_results('SELECT name, count FROM wp_celebcount_' . $table);
foreach($result as $row) {
echo '<a href="http://www.celebrything.com/?s=' .
    urlencode($row->name) . '&search=Search">' . $row->name .
    '</a> - ' . $row->count . ' Posts<br/>';
}
}



showTable($_GET['table']);
?>

</h2>
</div>

</div>

<div class="clear"></div>

我收到此错误:

解析错误:语法错误,第 16 行 /home/content/c/e/l/celebrything/html/wp-content/themes/celebrything/sidebar.php 中出现意外的“{”

【问题讨论】:

  • 不确定我的
  • 我编辑了我的答案。这有帮助吗?

标签: php sql logic


【解决方案1】:

您可以将代码变成一个函数,并通过请求参数选择表。就像下面这样。注意我添加了in_array 检查以确保该表不是任何表。

<a href="page.php?table=today">Today</a>
<a href="page.php?table=week">Week</a>

PHP

function showTable ($table) {

if (!in_array($table, array('today', 'week', 'month')) {
  return false;
}

global $wpdb;
$result = $wpdb->get_results('SELECT name, count FROM wp_celebcount_' . $table);
foreach($result as $row) {
echo '<a href="http://www.celebrything.com/?s=' .
    urlencode($row->name) . '&search=Search">' . $row->name .
    '</a> - ' . $row->count . ' Posts<br/>';
}
}

调用page.php中的函数:

if (empty($_GET['table'])) {
    showTable($_GET['table']);
} else {
    showTable('today');
}

【讨论】:

  • 试图让它工作。默认情况下,我将如何在页面加载时显示这些表之一的结果?
  • 添加一个逻辑来检查 $_GET['table'] 是否为空。
  • 遇到一些问题...无法正常工作。我将用我拥有的东西在上面进行编辑,那是行不通的。非常感谢您的帮助!
  • 您没有复制整个代码。如果您将其用作函数,请确保您具有该函数。这是 PHP 手册中解释的函数的链接,php.net/manual/en/language.functions.php
  • 啊啊啊!!你说得对!我忘记了那部分 - 定义功能。现在它起作用了!谢谢。但是现在..当我点击主体时显示页面未找到错误。
【解决方案2】:

你可以根据网址参数来制作。

链接将如下所示:site.php?type=today

然后,在您的 PHP 脚本中,例如,您可以这样做:

if (isset($_GET['type']))
{
    switch ($_GET['type'])
    {
        case 'today':
            // Query and list for today
            break;
        case 'thisweek':
            // Query and list for this week
            break;
        case 'thismonth':
        default:
            // Query and list for this month
            break;
    }
}
else
    // Error handling here

编辑:我使示例更加具体,并使用了switch 构造,因为它可以更轻松地混淆默认情况。

现在假设当给出无效类型时,会显示本月的列表。我想这就是你想要的......

不过,让我问你:你到底为什么会有这三张桌子?请告诉我您没有使用某种类似 cron 的脚本将项目从今天表移动到本周列等等......如果是这样,您应该只在一个表中执行此操作,并使用一个日期列。

编辑 2:不过,要修复您的示例代码,您需要将变量名从 $table 更改为 $_GET['table']。您还应该检查变量是否存在(通过检查isset($_GET['table']))。

【讨论】:

  • 我也希望您的脚本在您编辑的答案中的示例代码中称为page.php... ;) 当您给我们的只是“它不起作用”时,我们无能为力。错误信息?
  • 谢谢弗朗茨。我正在使用不同的表,因此查询将运行得更快,并且页面将加载得更快。我在数据库中运行计数,然后将结果插入这些不同的表中。
  • 嗯 - 这可能与我试图在我的 sidebar.php 中调用它的事实有关吗?我正在尝试将这些结果加载到侧边栏中...celebrything.com
  • 嗯,是的,只需将page.php 或其他任何内容更改为sitebar.php 或其他名称...
  • 哦,我知道了。您正在从另一个答案调用该函数而不定义它。要么将函数调用上方的代码包含在函数定义中,要么只删除函数调用并将$table替换为$_GET['table']
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-10
  • 1970-01-01
  • 2021-02-24
  • 1970-01-01
  • 1970-01-01
  • 2017-01-19
相关资源
最近更新 更多