从表中检索不同的值

时间:2014-03-27 22:02:09

标签: php mysql

我必须为每个客户打印一次客户名称和所有产品。我的代码如下。

 <div id="Allproducts">
 <?php
  $AllprodsRes = $conn -> query("select * from sepproducts");
  if($AllprodsRes ->num_rows > 0){
    $result = $AllprodsRes -> fetch_array(); 
  ?>
    <label for="name"><?php echo $result['name'] . " " . $result['surname']; ?></label>
  <?php } ?>
  <?php do{ ?>

  <p><?php echo $result['product_name'] . " " //$result['count']; ?></p>  
 <?php }while($result = $AllprodsRes -> fetch_array()); ?>
 </div>

查看sepproducts

CREATE 
    ALGORITHM = UNDEFINED 
    DEFINER = `root`@`localhost` 
    SQL SECURITY DEFINER
VIEW `sepproducts` AS
    select 
        `customers`.`name` AS `name`,
        `customers`.`surname` AS `surname`,
        `custproducts`.`product_name` AS `product_name`,
        count(0) AS `count`
    from
        (`custproducts`
        join `customers` ON ((`custproducts`.`custid` = `customers`.`custid`)))
    group by `custproducts`.`product_name`

欢迎并感谢任何帮助。 提前谢谢。

2 个答案:

答案 0 :(得分:2)

您可以使用的内容如下(假设您使用MySQLi):

<?php
$con = new mysqli('localhost', 'username', 'password', 'db');
$query = $con->query('SELECT * FROM...');

$currentCustomer = null;
while ($result = $query->fetch_array()) {
    $name = $result['name'] . ' ' . $result['surname'];

    // Check to see if we're working with a new customer.
    if ($currentCustomer != $name) {
        echo $name . '<br />';
        $currentCustomer = $name;
    }

    echo $result['product_name'] . '<br />';
    echo $result['product_type'] . '<br />';

    // ETC.
}
?>

或者,如果您只有一位客户需要担心,请使用以下命令:

<?php
$con = new mysqli('localhost', 'username', 'password', 'db');
$query = $con->query('SELECT * FROM...');

if ($query->num_rows > 0) {
    $result = $query->fetch_array();

    echo $result['name'] . ' ' . $result['surname'] . '<br />';

    do {
        echo $result['product_name'] . '<br />';
        echo $result['product_type'] . '<br />';

        // ETC.
    } while ($result = $query->fetch_array());
}
?>

实际上,它检查是否找到了记录,如果是,则将一个结果写入我们的数组$ result。然后我们输出客户的名称OUTSIDE(所以这只发生一次),然后使用do ... while()循环继续通过结果数组的其余部分。

我希望这有帮助!

答案 1 :(得分:0)

根据您使用的数据库,您可以将多行连接到一个列中。最终这是一个显示问题。我说继续做你正在做的事情并在你的视图中跟踪循环中的当前名称并与下一个名称进行比较 - 如果名称相同则忽略它,当名称不同时将current_name设置为此新名称并继续。这样每个名称只显示一次。