【问题标题】:Display Associative Array with Empty Values in table Format?以表格格式显示具有空值的关联数组?
【发布时间】:2014-12-14 18:45:44
【问题描述】:

我有一个生成关联数组的 SQL 查询,现在我需要一种方法以表格格式打印此数组

这是生成的数组:

Array ( [0] => Array ( 
   [username] => Humza 
   [Reputation] => 100 
   [Question_Title] => Did This Work? 
   [Question] => Well Did it? 
   [Rating] => 1001 
   [Category] => Dr Who 
   [AnswerUserName] => God 
   [AnswerUserReputation] => -50 
   [Answer] => Please Work
   [Answer_Rating] => 100 
   [AnswerCategory] => Dr Who )  

现在我使用这个函数在表格中打印:

function build_table($array){

// start table
$html = '<table>';

// header row
$html .= '<tr>';

foreach($array[0] as $key=>$value){
        $html .= '<th>' . $key . '</th>';
    }

$html .= '</tr>';

// data rows
foreach( $array as $key=>$value){
    $html .= '<tr>';

    foreach($value as $key2=>$value2){

        $html .= '<td>' . $value2 . '</td>';

    }

    $html .= '</tr>';

}

// finish table and return it

$html .= '</table>';

return $html;

}

 $array = $term;

if (empty($array)) {
 echo "No results could found, please try and use a different search term and remember
 your searching for a question title";
}
else
{
echo build_table($array);
}

?>

但是如果数组变成这样:

Array ( [0] => Array ( 
  [username] => Humza 
  [Reputation] => 100 
  [Question_Title] => Did This Work? 
  [Question] => Well Did it? 
  [Rating] => 1001 
  [Category] => Dr Who 
  [AnswerUserName] => 
  [AnswerUserReputation] => 
  [Answer] => 
  [Answer_Rating] => 
  [AnswerCategory] => )

如何在表格中打印以上内容?基本上它只会显示问题而不是答案。因为我的搜索工具应该能够搜索问题并显示它们,无论他们是否有答案。

目前它不会显示任何没有答案的问题,因此完全错过了它们

这是模型:

function __construct()
{
    parent::__construct();
    $this->load->database();
}

function GuestSearch($Term)
{

/*This will print out the Question Title, Question, Username and Rating atm*/

$sql2 = "SELECT u.username, 
r.Reputation,
q.Question_Title, 
q.Question, 
q.Rating, 
c.Category,
ua.username as AnswerUserName,
ar.Reputation as AnswerUserReputation,
a.Answer,
a.Answer_Rating,
ac.Category as AnswerCategory
FROM Questions q 
join Users u on u.id = q.User_ID
join Answers a on a.Question_ID = q.Question_ID
join Users ua on ua.id = a.Answer_User_ID
join Reputation r on r.User_Rep_ID = u.id
join Categorys c on c.Category_ID = q.Category_ID
join Categorys ac on ac.Category_ID = q.Category_ID
join Reputation ar on ar.User_Rep_ID = a.Answer_User_ID
WHERE q.Question_Title LIKE '%$Term%'";


$results = $this->db->query($sql2);

$data = $results->result_array();

$results->free_result();

return $data;

}
}
 ?>

【问题讨论】:

  • 我重新阅读了问题,请编辑您的问题,以便更容易理解。再次形成你的问题。更好的是,添加模型和负责的方法来生成数组。
  • 我已经添加了模型和负责的方法来生成它刚刚发生的数组,问题可能出在方法中
  • 尝试编辑查询而不是WHERE put AND;
  • 我刚做了,没有任何区别,它根本不会显示我的第三个问题,它没有附加答案。

标签: php html arrays codeigniter


【解决方案1】:

我认为这里的问题是您在 answers 表上进行 INNER JOIN;这将只允许有相关答案的问题。

INNER 似乎隐含在 JOIN 中,请参阅:Difference between JOIN and INNER JOIN

SELECT u.username, r.Reputation, q.Question_Title,
    q.Question, q.Rating, c.Category,
    ua.username as AnswerUserName,
    ar.Reputation as AnswerUserReputation,
    a.Answer, a.Answer_Rating,
    ac.Category as AnswerCategory
FROM Questions q 
    INNER JOIN Users u ON u.id = q.User_ID
    LEFT OUTER JOIN Answers a ON a.Question_ID = q.Question_ID
    LEFT OUTER JOIN Users ua ON ua.id = a.Answer_User_ID
    INNER JOIN Reputation r on r.User_Rep_ID = u.id
    INNER JOIN Categorys c ON c.Category_ID = q.Category_ID
    INNER JOIN Categorys ac ON ac.Category_ID = q.Category_ID
    LEFT OUTER JOIN Reputation ar ON ar.User_Rep_ID = a.Answer_User_ID
WHERE q.Question_Title LIKE '%$Term%'

使用这个(稍微重新格式化)查询,在答案表和用户/声誉表(关于Answer_User_ID)上带有LEFT OUTER JOIN,将包括没有任何相应答案的问题和回答者的声誉(字段与这些相关的将是 NULL)。

【讨论】:

    猜你喜欢
    • 2014-04-26
    • 2016-07-27
    • 2017-01-01
    • 2014-11-02
    • 2023-03-14
    • 2011-10-13
    • 2016-11-12
    • 1970-01-01
    • 2013-04-17
    相关资源
    最近更新 更多