Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php mysql中将搜索选项中的数据指定为json格式_Php_Mysql_Arrays_Json - Fatal编程技术网

如何在php mysql中将搜索选项中的数据指定为json格式

如何在php mysql中将搜索选项中的数据指定为json格式,php,mysql,arrays,json,Php,Mysql,Arrays,Json,我希望以表格格式输出: 权限5的搜索结果 My Mysql table is in following format and with json format for shows_id id | assign_id | rights | party |shows_id ---+-------------+------------+------------+--------- 1 |4 | 12 | xyz | ["2

我希望以表格格式输出:
权限5的搜索结果

My Mysql table is in following format and with json format for shows_id 

id |  assign_id  |  rights    | party      |shows_id
---+-------------+------------+------------+---------
1  |4            |  12        | xyz        | ["2","3","13","14"]
2  |4            |   5        | xyz        | ["2","3","13","59"]
3  |6            |  14        | abc        | ["56","57","59","60"]
4  |6            |  5         | abc        | ["56","57","59","60"]
5  |7            |  12        | def        | ["2","41","42","54"]
6  |7            |  5         | def        | ["2","41","42","59"]

我在数组中获得了
shows\u id
的所有id,但是如果kcome是三方的,我如何根据它显示参与方的名称呢?

根据提供的设计,不可能获得上面描述的输出,因为shows\u id存储为(json)字符串(这也不是一个好的设计)。我建议创建一个包含
party
show\u id
列的新表来存储这些映射,然后我们可以查询该表以生成所需的输出


假设我们有存储这些映射的
表,SQLFIDLE描述了如何生成输出。

首先要做的事情。此表设计对于检索此类数据而言非常糟糕。我建议改成这样:

     | party                |shows_id
-----+----------------------+----------
     | xyz  ,def            | 2
     | xyz                  | 3
     | xyz                  |13
     | xyz ,def,abc         |59
     | abc                  | 56         
     | abc                  | 57
     | abc                  | 59
     | abc                  | 60
     | def                  | 41
     | def                  | 42
$pdo = getDbConnection(); //Let's assume you retrieve your DB connection here, as PDO
$sql = "SELECT * FROM party";
$results = $pdo->query($sql);
$return = array();
foreach ($results as $result) {
    $shows = json_decode($result['shows_id'], true);
    foreach ($shows as $show_id) {
        if (empty($return[$show_id])) {
            $return[$show_id] = array($result['party']);
        } else {
            $return[$show_id][] = $result['party'];
        }
    }
}
foreach ($return as &$return_row) {
    $return_row = implode(',', array_unique($return_row));
}
然后,使用以下查询检索数据将非常容易:


选择GROUP_CONCAT(按party.party分隔符“,”区分party.party顺序),party_显示.shows_id
来自党
内部加入方显示在参与方上。id=参与方显示。参与方id
按派对分组\u shows.shows\u id

您还可以查询特定的id

在您的设计中,您将无法使用“纯”MySQL查询。你还需要一整张桌子来展示任何东西。对于更大的数据库来说,这将是自杀。

但是-有可能根据您的意愿准备结果。它将类似于以下伪代码:

party:
  ID
  assign_id
  rights
  party

party_shows:
  party_id
  shows_id
现在,您有了
$return
表,其中每一行都是带有参与方名称的字符串。
$return
数组的键是show id,因此您可以根据它进行进一步筛选

我必须再说一遍:这不是一个好办法。但这是可能的

最后请注意:您的表结构(在表中重复参与方名称)表明,整个结构需要进一步解耦。作为一般规则-每个实体(参与方、用户、参与方)应显示为一行。所以,您应该有一个用于各方、受让人、演出等的表,以及适当的联接表。也许是这样的:

     | party                |shows_id
-----+----------------------+----------
     | xyz  ,def            | 2
     | xyz                  | 3
     | xyz                  |13
     | xyz ,def,abc         |59
     | abc                  | 56         
     | abc                  | 57
     | abc                  | 59
     | abc                  | 60
     | def                  | 41
     | def                  | 42
$pdo = getDbConnection(); //Let's assume you retrieve your DB connection here, as PDO
$sql = "SELECT * FROM party";
$results = $pdo->query($sql);
$return = array();
foreach ($results as $result) {
    $shows = json_decode($result['shows_id'], true);
    foreach ($shows as $show_id) {
        if (empty($return[$show_id])) {
            $return[$show_id] = array($result['party']);
        } else {
            $return[$show_id][] = $result['party'];
        }
    }
}
foreach ($return as &$return_row) {
    $return_row = implode(',', array_unique($return_row));
}

但这只是一个纯粹的猜测,如果不了解表的整体结构和用途,我将无法说出更多信息。

在我的搜索结果中得不到您想要的内容:如果“权限”列包含5个所有显示,则将根据其参与方名称显示5个右id