在一个页面上显示来自不同查询的结果,或者不是同时显示

时间:2009-12-11 16:54:48

标签: php sql logic

不确定这是否是说出我想要做的最好的方法。这是:

我希望用户能够基于三个不同的表一次一个地在我的数据库中显示结果。

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

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

以下是我在今日表中的调用方式:

<?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中的意外“{”

2 个答案:

答案 0 :(得分: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');
}

答案 1 :(得分:0)

您可以根据网址参数进行制作。

链接看起来像这样: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'])检查)。