如何在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