从数据库中获取复杂的表数据

时间:2016-04-04 04:41:58

标签: php wordpress

我在数据库中有一个表,我想从中获取数据。我知道如何使用php从数据库中获取数据。但问题是 这张表的结构不同。例如

enter image description here 等等...

如您所见,此表就像一个数据透视表。这对我来说是个真正的问题。一个人的所有条目应该是单行的。但它位于不同的行和单列中(单个人的所有条目都在value列中)。

我试图像这样以常规方式获取表格

<?php
/*
Template Name: Registration
*/
get_header();

$results = $wpdb->get_results( "SELECT * FROM wp_cf_form_entry_values", ARRAY_A  );
$count = $results->num_rows;
if(!empty($results)) {
    echo "<table width='100%' border='1' cellspacing='1'>";
    echo "<tbody>";

    foreach($results as $row){
        echo "<tr>";              
        echo "<td><center>" . $row['value'] . "</center></td>";              
        echo "</tr>";
    }
    echo "</tbody>";
    echo "</table>"; 
} else {
    echo "<table width='100%' border='1' cellspacing='1'><tr><td>No Records Found</td></tr></table>";
}

get_footer();?>

但是使用上面的代码,它会在一个列中显示所有结果,这就是我对上面代码的期望。

所以我不知道将此表表示为单人的单行条目的正确代码。我搜索了很多但没有得到太多。

2 个答案:

答案 0 :(得分:1)

您使用外键entries_id,因此您可以从该表中检索,即

$results=$wpdb->get_results("select * from entries_table");
foreach($results as $result){
    $entries_id=$result->id;
    $entry_detail=$wpdb->get_results(SELECT * from form_field_table where entries_id='$entries_id' ");
        foreach($entry_detail as $ent_detail){?>
            <td><?php echo $ent_detial->slug;?></td><td><?php echo $ent_detial->value;?></td>
        <?php }
}

答案 1 :(得分:1)

我很确定你会找到这样的东西:

横向代表:(按人)

<?php
/*
Template Name: Registration
*/
get_header();

global $wpdb;

//Create a mulit dimensional array for each person.
$persons = array();
$fields = $wpdb->get_results( 'SELECT * FROM wp_cf_form_entry_values');
foreach($fields as $field){
    $persons[$field->entry_id][$field->slug] = $field->value;
}

//the table
echo '<table width="100%" border="1" cellspacing="1">';
$i=0;
foreach($persons as $id=>$values){

    //the table header (only in the first loop)
    if($i==0){
        echo '<tr>';
        foreach($values as $key=>$val){
            echo '<th>'.$key.'</th>';
        }
        echo '</tr>';
    }

    // one line per person
    echo '<tr id="'.$id.'">';
    foreach($values as $key=>$val){
        echo '<td>'.$val.'</td>';
    }
    echo '</tr>';
    $i++;
}

if($i==0){
   echo "<table width='100%' border='1' cellspacing='1'><tr><td>No Records Found</td></tr></table>";
}

echo '</table>';

get_footer();?>

垂直表示(按字段说明)

<?php
/*
Template Name: Registration
*/
get_header();

global $wpdb;

//Create a mulit dimensional array for each slug.
$field_slugs = array();
$fields = $wpdb->get_results( 'SELECT * FROM wp_cf_form_entry_values');
foreach($fields as $field){
    $field_slugs[$field->slug][$field->entry_id] = $field->value;
}

//the table
echo '<table width="100%" border="1" cellspacing="1">';
$i=0;
foreach($field_slugs as $slug=>$values){

    //the table header (only in the first loop)
    if($i==0){
        echo '<tr>';
        foreach($values as $person_id=>$val){
            echo '<th></th>';
            echo '<th>Person '.$person_id.'</th>';
        }
        echo '</tr>';
    }

    // one line per person
    echo '<tr id="'.$slug.'">';
    echo '<td><b>'.$slug.'</b></td>';
    foreach($values as $person_id=>$val){
        echo '<td>'.$val.'</td>';
    }
    echo '</tr>';
    $i++;
}

if($i==0){
   echo "<table width='100%' border='1' cellspacing='1'><tr><td>No Records Found</td></tr></table>";
}

echo '</table>';

get_footer();?>