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,但如果 Kcome 是三方,我如何显示派对名称?
使用提供的设计,无法获得上述输出,因为shows_id存储为 (json) 字符串(这也是不好的设计)。我建议创建一个包含party
和show_id
列的新表来存储这些映射,然后,我们可以查询该表以生成所需的输出。
假设我们shows
存储这些映射的表,这个 SQL 小提琴描述了如何生成输出。
首先要做的事。此表设计对于检索此类数据非常不利。我建议将其更改为类似的东西:
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 查询。您还必须要求整个表格来显示任何内容。对于更大的数据库来说,这将是自杀式的。
但是 - 有可能根据您的意愿准备结果。它看起来类似于以下伪代码:
$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
但这只是一个纯粹的猜测,如果不了解桌子的整体结构和用途,我将无法说出更多。