2016-03-21 39 views
-1

我有一个添加行“年龄”,通过单击列名称排序表中的数据。我尝试了很多解决方案,但没有任何效果。我需要新列 “时代”:从成员如何通过点击列标题添加“年龄”来对列进行排序?

<?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(); 

通知 TIMESTAMPDIFF(YEAR,CURDATE(),geburtstag):未定义指数:年龄线:“PHP的echo $行[”年龄']“

你能帮帮我吗?谢谢。

+2

while while add'print_r($ row);'并发布结果 –

+0

谢谢,但是n ot work .... name,vorname,geburtstag,ort都来自SQL Table,我想让临时的“年龄”....如何以及在哪里? 谢谢 –

+0

年龄不在表中,因此问题 –

回答

2

您的members表中可能没有名为age的列。只是提高你的查询一点点:

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

这看起来像一个很好的计划。 –

+0

没有一列没有列“年龄” $ where =“ORDER BY $ id $ action”; $ sql =“SELECT members。*,TIMESTAMPDIFF(YEAR,geburtstag,CURDATE())as age FROM members”; $ where =''; 这已经显示年龄,但不排序通过点击标题 –

+0

谢谢:) 谢谢。这是OK :) '$ sql =“SELECT members。*,TIMESTAMPDIFF(YEAR,geburtstag,CURDATE())as age FROM members”。 $ where;' –

2

你不能计算年龄减去年,因为年龄也计算也考虑天。

使用此查询:

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

sqlFiddle demo

通过这个查询,你从多年差减去1,如果当前月/日(SUBSTR(CURRENT_TIMESTAMP,6,5))比生日月/日小( (SUBSTR(geburtstag,6, 5)

+0

注意:未定义的索引:年龄在线:“php echo $ row ['age']” 谢谢,但不行。 你能帮我吗?究竟在哪些行中。我是PHP新手, 同样,我不会说英语。我是德国人。 –

+0

列“geburtstag”格式为“日期” –

+0

然后呢?它会在日期正常工作。你有没有试过,它不适合你? – fusion3k

相关问题