【问题标题】:SELECTING in two tables...在两个表中选择...
【发布时间】:2011-07-08 07:09:59
【问题描述】:

我有两个表格用于查看我的报告,我可以在输入日期后获得这些表格。

这是我的表格:针对客户 - customer_date、lastname、firstname

用于服务 - room_number、date_in、date_out

这是我现在的代码:它似乎无法从我的表中获取任何行

<?php 

$conn = mysql_connect("localhost","root","");

mysql_select_db('irm',$conn);

if(isset($_GET['Submit'])){

$customer_date = $_GET['customer_date'];
}

?>
<form method="get">
<table width="252" border="0">
  <tr>
    <td width="98">Choose Date:</td>
    <td width="144"><label>
  <input onclick="ds_sh(this);" name="customer_date" id="customer_date" readonly="readonly" style="cursor: text" />
</label></td>
 </tr>
 <tr>
<td align="right"><input type="submit" value="Submit" /></a></td>
<td></td>
</tr>
</table>
</form>  

<form>
<?php

    $tryshow = "SELECT * FROM customers,services WHERE customer_date = '$customer_date' ";

    $result = @mysql_query($tryshow,$conn)
            or die("cannot view error query"); 

    if (mysql_num_rows($result) == 0) {
    echo "No rows found, nothing to print...";
}
while($row=mysql_fetch_assoc($result)){
?>
<table width="700" border="0">
    <tr>
      <td width="100">Customer Date:</td>
      <td width="100">Last Name</td>
      <td width="100">First Name</td>
      <td width="100">Room Number</td>
      <td width="100">Date In</td>
      <td width="100">Date Out</td>
    </tr>
    <tr>
      <td><?php echo $row["customer_date"]; ?></td>
      <td><?php echo $row['lastname']; ?></td>
      <td><?php echo $row['firstname']; ?></td>
      <td><?php echo $row['room_number']; ?></td>
      <td><?php echo $row['date_in']; ?></td>
      <td><?php echo $row['date_out']; ?></td>
   </tr>
  </table>
<?php }?>
</form>

有了这个我可以得到任何在那个日期签到的客户的报告。

我需要一些建议。希望你能尽快回复我。

【问题讨论】:

    标签: php mysql sql select join


    【解决方案1】:

    您需要通过 JOIN 关联这两个表。根据给出的信息,customers.customer_dateservices.date_in 似乎是最有可能的候选人。这假定日期列仅包含日期而不是日期/时间。

    另外请注意,我在查询中没有使用select *,您也不应该使用。 ;-)

    SELECT c.customer_date, c.lastname, c.firstname,
           s.room_number, s.date_in, s.date_out
        FROM customers c
            INNER JOIN services s
                ON c.customer_date = s.date_in
        WHERE c.customer_date = '$customer_date' 
    

    【讨论】:

    • +1 用于删除 SELECT * 和正确连接。 @renz:具体而准确地了解您想要的数据。当您指定所需的确切列时,您的 RDBMS 将始终更好地执行和扩展。
    • 感谢您的回复。我现在正在做出改变。也感谢您的编码建议。我还是新手,但不断阅读和尝试,我知道我可以做得更多。再次感谢
    • @joe 我已经应用了您的查询,但仍然无法获取任何行?? :(
    • @renz:你确定你有满足查询的数据吗?
    • @joe 是的,如果我删除 where 子句,它会显示行。嗯很奇怪
    【解决方案2】:

    顺便说一句,我会将 customer_date 更改为更有意义的内容,例如“date_in”。 (如果名称是可预测的,这是一件好事!)您不需要指定它是客户,因为它已经在客户表中。

    【讨论】:

      【解决方案3】:

      当您对数据库进行查询时,请确保您的日期格式为yyyy-mm-dd

      Mysql 只理解这种格式的日期,所以你只需要比较这种格式的日期格式。

      您的$customer_date 应采用yyyy-mm-dd 格式

      【讨论】:

        【解决方案4】:

        这两个表之间似乎没有任何共同的字段。您如何存储客户 A 在日期 C 在房间 B 的事实?要进行 SQL 连接,被连接的表必须至少有一个共同的字段。

        同样,不要只说die("cannot view error query"),这对于调试目的完全没用,而是尝试使用die(mysql_error(),这将为您提供查询失败的确切原因。

        同样,如果查询确实有效,那么您将为找到的每一行输出一个完整的 HTML 表。您应该在 fetch 循环之外拥有表格页眉和页脚数据。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-03-19
          • 1970-01-01
          • 1970-01-01
          • 2014-04-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多