2017-02-08 1 views
1

У меня есть таблица данных mysql, которую я показываю на php-странице. Он работает, но я бы хотел, чтобы они были сгруппированы под отделами, к которым они принадлежат. Также удалите все другие заголовки полей, такие как Name, Phone Email.отображение таблицы mysql с полем в качестве основного заголовка

Я пробовал использовать SORT BY, но ничего не произошло.

например. Это, как я хотел бы, чтобы это выглядело как

       Vehicle Department 
        Bob  3234234  [email protected] 
        Hanna  3434323  [email protected] 
           Workshop Department 
        Andrew  45454523 [email protected] 

Это, как в настоящее время он выглядит:

ID Name  Phone  Email    Department 
1  Bob  3234234  [email protected]  Vehicle Department 
2  Hanna  3434323  [email protected] Workshop Department 

мой текущий код:

<?php 

    $db_host = 'localhost'; 
    $db_user = 'root'; 
    $db_pwd = '*****'; 

    $database = 'list'; 
    $table = 'users'; 

    if (!mysql_connect($db_host, $db_user, $db_pwd)) 
     die("Can't connect to database"); 

    if (!mysql_select_db($database)) 
     die("Can't select database"); 

    // sending query 
    $result = mysql_query("SELECT * FROM {$table}"); 
    if (!$result) { 
     die("Query to show fields from table failed"); 
    } 

    $fields_num = mysql_num_fields($result); 

    echo "<table border='1'><tr>"; 
    // printing table headers 
    for($i=0; $i<$fields_num; $i++) 
    { 
     $field = mysql_fetch_field($result); 
     echo "<td>{$field->name}</td>"; 
    } 
    echo "</tr>\n"; 
    // printing table rows 
    $temp = ""; 

    while($row = mysql_fetch_row($result)) 
    { 
     echo "<tr>"; 

     if ($row['department'] != $temp){ 
     echo "<td colspan=\"3\">" . $row['department'] . "</td></tr>\n<tr>"; 
     $temp = $row['department']; 
    } 

    echo "<td>" . $row['name'] . "</td><td>" . $row['phone'] . "</td><td>" . $row['email'] . "</td>"; 

    echo "</tr>\n"; 
    // $row is array... foreach(..) puts every element 
    // of $row to $cell variable 
    foreach($row as $cell) 
     echo "<td>$cell</td>"; 

    echo "</tr>\n"; 
    } 
    mysql_free_result($result); 
?> 
+1

Я горячо рекомендую переключиться на [ 'mysqli_ *'] (http://php.net/manual/en/book.mysqli.php) или [ 'PDO'] (http://php.net/manual/en/ref.pdo-mysql.php), поскольку старое 'mysql_ *' -extension устарело и удалено в более новых версиях PHP. – MrDarkLynx

+0

Спасибо, я изменю его. Просто хочу, чтобы он работал до того, как я скрипнул :) – RedZ

ответ

1

Если вы используете

"SELECT name, phone, email, department FROM {$table} ORDER BY department" 

как ваш запрос, он будет возвращать только желаемые столбцы, упорядоченных по department колонку.
Затем вы можете разместить их в своем столе в зависимости от их отдела.

Обратите внимание, что вам, возможно, придется изменять имена столбцов.

Попробуйте этот код:

<?php 
    $db_host = 'localhost'; 
    $db_user = 'root'; 
    $db_pwd = '*****'; 

    $database = 'list'; 
    $table = 'users'; 

    $conn = mysqli_connect($db_host, $db_user, $db_pwd) or die("Connecting to database failed"); 

    mysqli_select_db($conn, $database) or die("Can't select database"); 

    // sending query 
    $result = mysqli_query($conn, "SELECT name, phone, email, department FROM {$table} ORDER BY department"); 
    if (!$result) { 
     die("Query to show fields from table failed"); 
    } 

    echo "<table border='1'><tr>"; 

    // printing table rows 
    $temp = ""; 

    while($row = mysqli_fetch_array($result)) 
    { 
     echo "<tr>"; 

     if ($row['department'] != $temp){ 
      echo "<td colspan=\"3\" align=\"center\">" . $row['department'] . "</td></tr>\n<tr>"; 
      $temp = $row['department']; 
     } 

     echo "<td>" . $row['name'] . "</td><td>" . $row['phone'] . "</td><td>" . $row['email'] . "</td>"; 

     echo "</tr>\n"; 
    } 
    mysqli_free_result($result); 
    echo "</table>" 
?> 
+0

это устраивает их, но отдел должен быть заголовком. Если вы видите мой вопрос выше. Департамент должен использоваться как заголовок для данных – RedZ

+0

@ J.Hof, это то, что я имел в виду: вы можете организовать их в своем столе в зависимости от их отдела. Но я еще раз посмотрю на это. – MrDarkLynx

+0

@ J.Hof Я отредактировал свой ответ. Пожалуйста, проверьте прилагаемый код. – MrDarkLynx

0

Во-первых, вы должны обработать данные чтобы организовать в структуре, которую вы хотите для нее.

<?php 

$db_host = 'localhost'; 
$db_user = 'root'; 
$db_pwd = '*****'; 

$database = 'list'; 
$table = 'users'; 

if (!mysql_connect($db_host, $db_user, $db_pwd)) 
    die("Can't connect to database"); 

if (!mysql_select_db($database)) 
    die("Can't select database"); 

// sending query 
$result = mysql_query("SELECT * FROM {$table}"); 
if (!$result) { 
    die("Query to show fields from table failed"); 
} 

$fields_num = mysql_num_fields($result); 

echo "<table border='1'><tr>"; 
// printing table headers 
for ($i = 0; $i < $fields_num; $i++) { 
    $field = mysql_fetch_field($result); 
    echo "<td>{$field->name}</td>"; 
} 
echo "</tr>\n"; 

//variable to store rearranged results; 
$resultsModified = []; 

// printing table rows 
while ($row = mysql_fetch_row($result)) { 
    if (!isset($resultsModified[$result['department']])) 
     $resultsModified[$result['department']] = []; 

    $resultsModified[$result['department']][] = $row; 
} 

foreach ($resultsModified as $daptName => $results) { 
    echo "<caption> $daptName </caption>"; 
    foreach ($results as $row) { 
     echo "<tr>"; 

// $row is array... foreach(..) puts every element 
// of $row to $cell variable 
     foreach ($row as $cell) 
      echo "<td>$cell</td>"; 

     echo "</tr>\n"; 
    } 
} 

mysql_free_result($result); 

Однако я не тестировал его, но это должно сработать.

+0

где бы я поставил этот код сэр? – RedZ

+0

Вам не нужно указывать точный код в любом месте. Это всего лишь пример реализации. Вы должны использовать логику внутри вашего foreach. –

+0

ah my apologese Я все еще учился – RedZ

Смежные вопросы