从同一个表中检索两次相同的数据

时间:2011-06-03 08:58:23

标签: php mysql

我有一个包含6个不同字段的表单,用于输入日期(day1day6),6个不同的字段输入特定日期的详细信息(dtls1dtls6) 。这些所有数据都将转到数据库。并且有一个页面显示所有这些数据。选择是根据日期。代码如下......

$today = date('D, d M, Y');
$sql = "SELECT * FROM tables WHERE day1 = '$today' AND org = 'green'";
if($_POST!=""){
 $mydate = mysql_real_escape_string($_POST['datepicker']);
    if($mydate!=""){    
        $sql = "SELECT * FROM tables WHERE day1 = '$mydate' AND org = 'green'"; 
    }       
}
$string = nl2br($string);
$num_results_per_page = 2;
$num_page_links_per_page = 5;
$pg_param1 = ""; // Ex: &q=value
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
pagination($sql, $num_results_per_page, $num_page_links_per_page, $pg_param);
if($pg_error == '')
{
    if(mysql_num_rows($pg_result) > 0)
    {
        while($data = mysql_fetch_assoc($pg_result))
        {

echo "<table width=585 height=203>
        <tr>
            <td height=10 colspan=3 align=left valign=top></td>
            </tr>
          <tr>
            <td height=17 colspan=3 align=center valign=middle class=text6>". $data['pgmtitle'] .".</td>
            </tr>
          <tr>
            <td height=17 colspan=3 align=center valign=middle class=text8>". $data['org'] .".</td>
            </tr>
          <tr>
            <td height=21 colspan=3 align=center valign=middle class=text19>". $data['programdtls1'] ." OR</td>
            </tr>
  <tr>
            <td width=190 height=32 align=left valign=top class=text3>". $data['venue'] ."</td>
            <td width=11 rowspan=2 align=left valign=top><div class=box2></div></td>
            <td width=368 rowspan=2 align=left valign=top class=text7>
                    <b>Contact:</b> ". $data['contactperson'] ."
                    <br/><b>Phone:</b> ". $data['contactnumber'] ."
                    <br/><b>E-mail ID:</b> ". $data['email'] ."
                    <br/><b>Website:</b> ". $data['website'] ."</td>
          </tr></table><br/>"

echo "</br>". $pagination_output; 
    }
    else
    {
        echo '<p class="text11">No events listed for this day.</p>';
    }
}
else
{
    echo $pg_error; //display any errors, you can remove this if you want.  
}
?>

此代码工作正常。问题是我想显示是否有任何东西(programdtls2到programdtls6)。事情是,使用programdtls2,我想显示场地,联系人,联系电话等,与programdtls1相同。像...

echo "<table width=585 height=203>
<tr>
<td height=10 colspan=3 align=left valign=top></td>
 </tr>
 <tr>
 <td height=17 colspan=3 align=center valign=middle class=text6>". $data['pgmtitle'] .".</td>
  </tr>
  <tr>
   <td height=17 colspan=3 align=center valign=middle class=text8>". $data['org'] .".</td>
   </tr>
   <tr>
   <td height=21 colspan=3 align=center valign=middle class=text19>". $data['programdtls2'] ."</td>
   </tr>
   <tr>
   <td width=190 height=32 align=left valign=top class=text3>". $data['venue']     ."</td>
   <td width=11 rowspan=2 align=left valign=top><div class=box2></div></td>
   <td width=368 rowspan=2 align=left valign=top class=text7>
                    <b>Contact:</b> ". $data['contactperson'] ."
                    <br/><b>Phone:</b> ". $data['contactnumber'] ."
                    <br/><b>E-mail ID:</b> ". $data['email'] ."
                    <br/><b>Website:</b> ". $data['website'] ."</td>
    </tr></table><br/>"

表格结构

"id_user INT NOT NULL AUTO_INCREMENT ,".
                "org VARCHAR( 100 ) NOT NULL ,".
                "pgmtitle VARCHAR( 100 ) NOT NULL ,".
                "category VARCHAR( 32 ) NOT NULL ,".
                "relation VARCHAR( 75 ) NOT NULL ,".
                "venue VARCHAR( 75 ) NOT NULL ,".
                "hr VARCHAR( 30 ) NOT NULL ,".
                "min VARCHAR( 30 ) NOT NULL ,".
                "time VARCHAR( 30 ) NOT NULL ,".
                "day1 VARCHAR( 30 ) NOT NULL ,".
                "day2 VARCHAR( 30 ) NOT NULL ,".
                "day3 VARCHAR( 30 ) NOT NULL ,".
                "day4 VARCHAR( 30 ) NOT NULL ,".
                "day5 VARCHAR( 30 ) NOT NULL ,".
                "day6 VARCHAR( 30 ) NOT NULL ,".
                "city VARCHAR( 35 ) NOT NULL ,".
                "others VARCHAR( 35 ) NOT NULL ,".
                "contactperson VARCHAR( 128 ) NOT NULL ,".
                "contactnumber VARCHAR( 128 ) NOT NULL ,".
                "email VARCHAR( 64 ) NOT NULL ,".
                "programdtls1 VARCHAR( 150 ) NOT NULL ,".
                "programdtls2 VARCHAR( 150 ) NOT NULL ,".
                "programdtls3 VARCHAR( 150 ) NOT NULL ,".
                "programdtls4 VARCHAR( 150 ) NOT NULL ,".
                "programdtls5 VARCHAR( 150 ) NOT NULL ,".
                "programdtls6 VARCHAR( 150 ) NOT NULL ,".
                "nature VARCHAR( 50 ) NOT NULL ,".
                "resentry VARCHAR( 50 ) NOT NULL ,".
                "confirmcode VARCHAR(32) ,".
                "PRIMARY KEY ( id_user )".
                ")";

这可能吗

1 个答案:

答案 0 :(得分:0)

如果我正确阅读此内容,您希望 programdtls2 取代 programdtls1 (如果已设置),可以使用简单的方法完成的if-else语句。

if($data['programdtls2'] != '')
{
  // programdtls2 is NOT empty, so superseed programdtls1:
  echo $data['programdtls2'];
}
else
{
  echo $data['programdtls1'];
}

上面的代码只是我认为你想要和应该做的一个简单的例子。您也可以进行内联检查,如下所示:

(($data['programdtls2'] != '') ? $data['programdtls2'] : $data['programdtls1'])

这意味着如果不是空的,请执行 dtls2 否则执行 dtls1 如果您将其与您已有的代码结合使用,则可以获得此功能。 请注意,此代码是从原始代码中复制的,因此包含相同的错误,例如缺少分号(;)。

echo "<table width=585 height=203>
        <tr>
          <td height=10 colspan=3 align=left valign=top></td>
        </tr>
        <tr>
          <td height=17 colspan=3 align=center valign=middle class=text6>
            ". $data['pgmtitle'] .".
          </td>
        </tr>
        <tr>
          <td height=17 colspan=3 align=center valign=middle class=text8>
            ". $data['org'] .".
          </td>
        </tr>
        <tr>
          <td height=21 colspan=3 align=center valign=middle class=text19>
            ". (($data['programdtls2'] != '') ? 
              $data['programdtls2'] : $data['programdtls1']) ." OR
          </td>
        </tr>
        <tr>
          <td width=190 height=32 align=left valign=top class=text3>
            ". $data['venue'] ."
          </td>
          <td width=11 rowspan=2 align=left valign=top><div class=box2></div></td>
          <td width=368 rowspan=2 align=left valign=top class=text7>
            <b>Contact:</b> ". $data['contactperson'] ."<br/>
            <b>Phone:</b> ". $data['contactnumber'] ."<br/>
            <b>E-mail ID:</b> ". $data['email'] ."<br/>
            <b>Website:</b> ". $data['website'] ."</td>
        </tr>
    </table>
<br/>";
echo "</br>". $pagination_output;

此外,我不会在这里进行太多的数据库设计,但初看起来你的设计是次优的。例如,您为数据库中的所有行保留了6天和6个事件,但有些只有1个,而其他行则有6个。最好在多个表中拆分,例如:

  1. 数据(活动名称,组织者,联系信息等)
  2. 天(活动日)
  3. 内容(活动内容)
  4. 如果每天只有一个内容,您可以合并日期和内容。此外,如果有多个活动的组织者,您可以考虑为这些组织者添加一个额外的表格(表格:组织者,其中包含联系信息)。这样可以将数据库大小降至最低,同时减少错误。

    最后一个旁注,请检查您的HTML标记。您的标记将强制所有浏览器进入Quirks-Mode,这与PC的不一致。