如何通过单击列标题添加“年龄”来对列进行排序?

时间:2016-03-21 23:46:45

标签: php mysql

我有一个添加行“age”,通过单击列名来排序表中的数据。我为此尝试了很多解决方案,但没有任何效果。我需要新栏目“年龄”: 来自成员的TIMESTAMPDIFF(年,CURDATE(),geburtstag)

<?php
// first creating database connection
$servername = "localhost";
$username = "user";
$password = "password";
$database = "celebrates"; //this will contain name of a database
// Create connection
$conn = new mysqli($servername, $username, $password, $database);

mysqli_set_charset($conn, "utf8");
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$action = '';
$sql = "SELECT * from members";
$where = '';
if(isset($_GET["id"]))
{
    $id = $_GET["id"]; //geting id value which we are passing from table headers
    $action = $_GET["action"]; // geting action value which we are passing from table headers

    //we are checking condition if $action value is ASC then $action will set to DESC otherwise it will remain ASC
    if($action == 'ASC')
    {
        $action='DESC';
    } else {
        $action='ASC';
    }

    if($_GET['id']=='id') {
        $id = "id";
    } elseif($_GET['id']=='name') {
        $id = "name";
    } elseif($_GET['id']=='vorname') {
        $id="vorname";
    } elseif($_GET['id']=='geburtstag') {
        $id="geburtstag";
    } elseif($_GET['id']=='age') {
        $id = "age";
    } elseif($_GET['id']=='ort') {
        $id = "ort";
    }
    $where = " ORDER BY $id $action ";
    $sql = "SELECT * FROM members " . $where;
}
?>



<!DOCTYPE html>
<html lang="de">
<table>
  <tr>
    <th><a href="site.php?id=<?php echo 'name';?>&action=<?php echo $action;?>">NAME</a></th>
    <th><a href="site.php?id=<?php echo 'vorname';?>&action=<?php echo $action;?>">VORNAME</a></th>
    <th><a href="site.php?id=<?php echo 'geburtstag';?>&action=<?php echo $action;?>">GEBURTSTAG</a></th>
    <th><a href="site.php?id=<?php echo 'ort';?>&action=<?php echo $action;?>">ORT</a></th>
    <th><a href="site.php?id=<?php echo 'age';?>&action=<?php echo $action;?>">AGE</a></th>
 </tr>

<?php
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// Fetch a result row as an associative array
    while($row = $result->fetch_assoc()) {
?>

  <tr>
   <td><?php echo $row["name"];?></td>
   <td><?php echo $row["vorname"];?></td>
   <td><?php echo date("j. F Y", strtotime($row["geburtstag"]));?></td>
   <td><?php echo $row['ort'];?></td>
   <td><?php echo $row['age'];?></td>
 </tr>

<?php
    }
    echo '</table>';
    echo '</div>';
} else {
    echo "0 results";
}

$conn->close();
  

注意:未定义的索引:年龄符合: “php echo $ row ['age']”

你能帮帮我吗?感谢。

2 个答案:

答案 0 :(得分:2)

您的age表中可能没有名为members的列。只需稍微增强您的查询:

$sql = "SELECT members.*, TIMESTAMPDIFF(YEAR,CURDATE(),geburtstag) as age FROM members " . $where

答案 1 :(得分:2)

您无法计算年龄减去年数,因为年龄也是根据天数计算的。

使用此查询:

    SELECT *, 
           YEAR( CURRENT_TIMESTAMP ) - YEAR( geburtstag ) - (SUBSTR(CURRENT_TIMESTAMP,6,5 ) < SUBSTR(geburtstag,6, 5)) as age
      FROM members

sqlFiddle demo

通过此查询,如果当前月/日(SUBSTR(CURRENT_TIMESTAMP,6,5))小于生日月/日((SUBSTR(geburtstag,6, 5)),则从年差中减去1