【问题标题】:How to display query results depending of the IDs of the submitted form? (php)如何根据提交表单的 ID 显示查询结果? (php)
【发布时间】:2021-03-17 15:23:11
【问题描述】:

我正在尝试显示具有特定结构的查询结果,但每次都失败。

详细解释:这里是数据库中的相关表。

submission_id 指的是提交表单的 ID:提交的第一个表单将具有 submission_id = 1,第二个将具有 submission_id = 2,等等...

form_id 指的是不同的形式。我感兴趣的是form_id = 6

fiel_id 指的是表单每个字段的 ID。例如:字段一,名称,有field_id = 1 等...

每个登录用户可以有多个submission_id(取决于他提交相关表单的次数)。为了测试代码,我提交了 2 次表单。我进行了下一个查询以获取我感兴趣的所有结果($sub_id_string 是一个变量,包含登录用户提交的表单的submission_id。在本例中为$sub_id_string = 5,6):

$result_id = array();
$result_sub_id = array();
$result_id_id = array();
$result_id_key = array();
$result = $wpdb->get_results ( 
    $wpdb->prepare("
    SELECT value, field_id, submission_id
    FROM  wp_fusion_form_entries
    WHERE field_id IN (6,7,8,19,20,21,22,23,24,28,29,32) AND form_id = '6' AND submission_id IN ($sub_id_string)
    ORDER BY submission_id, field_id
    ")
);
foreach($result as $key => $results){
    $result_id[] = $results->value;     // All values (50kg, no, 170...60kg, yes, 165...)
    $result_sub_id[] = $results->submission_id;     // submission IDs (5,5,5...6,6,6...)
    $result_id_id[] = $results->field_id;       // IDs of field_id (6,7,8,19....6,7,8,19...)
    $result_id_key[] = $key;            // keys of results
}

我打印了不同的数组进行检查,一切正常。现在事情越来越难了。我想做什么:

显示结果如下:

//For the first submission (ex: submission_id = 5)
<h1> My informations </h1>
Name: value 1
Forname: value 2
....
Weight: value 12

//If there is a 2nd submission (ex: submission_id = 6)
<h1> My informations </h1>
Name: value 1
Forname: value 2
....
Weight: value 12

// etc... if there are more submissions 

这让我发疯!我确定答案就在我的眼前,但我还没有成功。如果您有任何建议,我将很荣幸阅读它们!提前感谢:)

【问题讨论】:

  • 您的问题究竟是什么? (即你的脚本的结果是什么?什么都不显示?)
  • 如果用户多次提交表单,我会采取类似的方法:对于每个submission_id,显示关联的值。在这种情况下:对于submission_id = 5,显示所有匹配submission_id = 5 的值。然后对于submission_id = 6,显示所有匹配submission_id = 6 的值,等等。我尝试了很多方法来做到这一点,但每次都失败了,所以我没有发布它

标签: php sql wordpress foreach


【解决方案1】:

您需要按提交 ID 对结果进行分组。

<?php

$result = $wpdb->get_results (
    $wpdb->prepare("
    SELECT value, field_id, submission_id
    FROM  wp_fusion_form_entries
    WHERE field_id IN (6,7,8,19,20,21,22,23,24,28,29,32) AND form_id = '6' AND submission_id IN ($sub_id_string)
    ORDER BY submission_id, field_id
    ")
);

$grouped = array();

foreach($result as $key => $results){
    if (!isset($grouped[$results->submission_id])) {
        $grouped[$results->submission_id] = array(
            'fields' => array() // to store all fields for this submission
        );
    }

    $grouped[$results->submission_id]['fields'][$results->field_id] = array(
        'field_id' => $results->field_id,
        'field_value' => $results->value,
    );
}

// now you have an array of submissions with the field values
// you can iterate with foreach
foreach ($grouped as $submissionId => $submission) {
    foreach ($submission['fields'] as $field) {
        echo "field: " . $field['field_id'] . "<br />";
        echo "value: " . $field['field_value'] . "<br />";
    }
}


【讨论】:

  • 天哪,非常感谢!这是我所期望的!你是最棒的! :D 我投了赞成票,但它不会显示给声望点低于 15 的人:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-30
  • 1970-01-01
  • 1970-01-01
  • 2014-10-18
  • 2020-08-28
  • 2018-10-28
  • 1970-01-01
相关资源
最近更新 更多