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"]
我希望以表格格式输出:
搜索结果对于权利5
| 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
我在数组中获得了shows_id
的所有ID,但是如果Kcomes在三方中,我如何能够显示派对名称?
答案 0 :(得分:0)
使用提供的设计,无法获得上述输出,因为shows_id存储为(json)字符串(它也不是很好的设计)。我建议创建一个包含party
和show_id
列的新表来存储这些映射,然后,我们可以查询该表以生成所需的输出。
假设我们有shows
表来存储这些映射,this SQL Fiddle描述了如何生成输出。
答案 1 :(得分:0)
首先要做的事情。此表设计非常糟糕用于检索此类数据。我建议将其更改为:
party:
ID
assign_id
rights
party
party_shows:
party_id
shows_id
然后使用以下查询很容易检索数据:
SELECT GROUP_CONCAT(DISTINCT party.party ORDER BY party.party SEPARATOR ','), party_shows.shows_id
FROM party
INNER JOIN party_shows ON party.id=party_shows.party_id
GROUP BY party_shows.shows_id
您还可以查询特定的shows_id。
在您的设计中,您无法使用纯粹的' MySQL查询。你还需要一个WHOLE表来显示任何东西。对于更大的数据库,这将是自杀。
但是 - 有可能根据您的意愿准备结果。它看起来类似于以下伪代码:
$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));
}
现在,您有$return
表,其中每一行都是带有派对名称的字符串。 $return
数组的键是显示ID,因此您可以通过它进一步过滤。
我必须再说一次:这不是一个好方法。但这是有可能的。
作为最后一点:您的表结构(表中的重复方名称)表明整个结构需要进一步解耦。作为一般规则 - 每个实体(派对,用户,派对节目)应显示为一行。所以你应该有适当的联接表的派对,受让人,演出等表。也许是这样的:
assignee:
id
name
assignee_party:
assignee_id
party_id
rights
party:
id
party
party_shows:
party_id
show_id
但这只是一个纯粹的猜测,在没有知道整个结构和目的的情况下,我无法告诉更多。