【问题标题】:Join table or 2 Select queries?加入表还是 2 选择查询?
【发布时间】:2014-05-09 20:23:26
【问题描述】:

我的数据库中有 2 个关系表。

我一直在努力了解下面的情况。

我有联系表,我有一个订单表。

我想尝试显示一次联系信息(姓名、电子邮件等),然后显示订单信息。

我知道我可以这样做:

<?php 
  $query = $db->prepare("SELECT *
                     FROM contact 
             WHERE type = ? 
             ORDER BY date") 
             or die(mysqli_error($db));  
  $type = "order";
  $query->bind_param('s', $type);
  $query->execute(); 
  $query->store_result(); 
  $query->bind_result($id, $name, $email, $date); 

  while ($query->fetch()) {
     $date = strtotime($date); 
     $date = date("F jS  Y", $date);
?>


From: <?php echo $name ?>

<input type="Checkbox" name="checkbox[]"  id="checkbox[]"value="<? echo $contactid; ?>">

<p>
<?php 
   echo $comments 
?>
</p>

<?php 
     echo $date ;
?>

<?php
     $order = $db->prepare("SELECT title, number
             FROM preorder 
             WHERE id = ? ") 
             or die(mysqli_error($db));  

     $order->bind_param('s', $id);
     $order->execute(); 
     $order->store_result(); 
     $order->bind_result( $title, $number ); 

     while ($order->fetch()) {
        echo $title, $number ; 
     }  
   } 
?>

这很好用,但感觉不对,而且更简单的方法是不做 2 次选择。然后我想在该循环中显示订单,因此每个订单不会重复名称、电子邮件等。

【问题讨论】:

  • 您的意思是按保存顺序还是用户定义的顺序显示它们?
  • 这是我目前正在做的工作,我已经编辑了上面的内容,但感觉使用连接表更好的方法,但是当我加入时,它会在每次那里列出名称是一个命令。所以它会显示例如。鲍勃订购 3 颗螺丝,鲍勃订购 4 把锤子,鲍勃订购 5 把锯,我想做的是改为订购鲍勃 3 颗螺丝,4 把锤子,5 把锯。无法发布代码
  • 为什么不将 display 或 display_order 列添加到联系人表并按该列排序?如果您不使用显示 id 排序 des 以便它们从头到尾出现?困惑,这与您在示例中的顺序相同。
  • 发布代码时遇到问题,但现在已更新
  • 给我看看你用的桌子

标签: php loops mysqli while-loop


【解决方案1】:

我会用这样的left join 解决它:

<?php
  $query = $db->prepare(
    "SELECT *, preorder.title, preorder.number " .
    "FROM contact " .
    "LEFT JOIN preorder  ON (contact.contactid = preorder.contactid) " .
    "WHERE type = ? ORDER BY contactid, date")
  or die(mysqli_error($db));
  $type = "order";
  $query->bind_param('s', $type);
  $query->execute();
  $query->store_result();
  $query->bind_result($id, $name, $email, $date, $title, $number);

  $last_id = false;
  while ($query->fetch()) {
    $date = strtotime($date);
    $date = date("F jS  Y", $date);

    if ($contactid != $last_id) {
?>
        From: <?php echo $name ?>
        <input type="Checkbox" name="checkbox[]" 
               id="checkbox[]" value="<? echo $contactid; ?>"> 
        <p>
            <?php
            echo $comments
            ?>
        </p>
<?php
      echo $date;
    }
    echo $title, $number;
    $last_id = $contactid;
  }
?>

【讨论】:

  • 谢谢你,这行得通:),我在想而不是使用foreach(仍然没有使用foreach),但这又快又好:) 当然这是一个常用的mysqli查询很多?
  • 我很高兴我的回答对您有用(:。我不确定这是否是解决此类问题的常用方法,但这是我解决问题的方法,结果如此远。@user3472437
猜你喜欢
  • 2011-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-01
  • 1970-01-01
  • 2014-11-11
  • 2023-04-09
相关资源
最近更新 更多