根据一列中的值链接的 MySQL table 数据构建一个多维 PHP 数组

Build a multidimensional PHP array out of MySQL table data linked by values in one column

我正在使用 Wordpress 插件(高级 CF7 数据库)。它将联系表的结果放入 MySQL 数据库中,以便在网站的前端显示。

有两个 table 有这样的数据。

Table 1:

id     | created
-------------------------------
1      |   2020-09-21 13:04:09  
2      |   2020-09-22 13:04:09    
3      |   2020-09-23 13:04:09    
4      |   2020-09-24 13:04:09    
5      |   2020-09-25 13:04:09  

Table 2:

data_id| name         | value
-------------------------------
1      |   fname      |   Joe  
1      |   sname      |   Smith    
1      |   age        |   19    
1      |   display    |   yes    
1      |   comment    |   Here is my comment    
2      |   fname      |   Jenny    
2      |   sname      |   Ford    
2      |   age        |   20    
2      |   display    |   no    
2      |   comment    |   Here is my comment    
3      |   fname      |   Hazel   
3      |   sname      |   Brown    
3      |   age        |   15    
3      |   display    |   yes   
3      |   comment    |   Here is my comment

table1中的id对应table2中的data_id。

我需要在两个单独的列表中显示网站上的评论(适用于 18 岁以上和以下的人),并且只在 'name = display' 和 'value = yes' 行中显示评论对应data_id.

示例:

15 岁以下人士的评论:

ID: 3
Name: Hazel Brown
Comment: Here is my comment

18 岁以上人士的评论

ID: 1
Name: Joe Smith
Comment: Here is my comment

最好的方法是将信息放入我可以操作的多维 PHP 数组中,还是应该尝试使用 MySQL 以我需要的格式获取信息是吗?

我不确定为什么你的 table 首先是这种格式,但你可以将你的 行值 设计成 首先,然后使用 HAVING 子句按您的条件进行过滤:

这是一个示例:

SELECT 
    t2.dataid,
    MAX(IF(t2.name = 'fname', t2.value, NULL)) AS `fname`, 
    MAX(IF(t2.name = 'sname', t2.value, NULL)) AS `sname`,
    MAX(IF(t2.name = 'age', t2.value, NULL)) AS `age`,
    MAX(IF(t2.name = 'display', t2.value, NULL)) AS `display`,
    MAX(IF(t2.name = 'comment', t2.value, NULL)) AS `comment`,
    t1.created

FROM table2 t2 
JOIN table1 t1 ON t2.dataid = t1.id

GROUP BY t2.dataid, t1.created
HAVING display = 'yes' AND age >= 18
# age <= 15 whatever your condition for age

之后就是获取它的问题了。旁注:我不是 wordpress 大师,但它相当简单,执行查询 -> 获取结果,将它们循环到你的标记中。

global $wpdb;
$query = '<your query here>';
$results = $wpdb->get_results($query);
foreach ($results as $row) {
    echo 'ID: ', $row->dataid;
    echo 'Name: ', $row->fname, ' ', $row->sname;
    echo 'Comment: ', $row->comment;
}

这只是一个示例,您可以随意添加标记 html。