MySQL 将查询结果追加到当前记录?

标签 mysql join append

我有一个成功的查询,当前返回除一个表之外的所有数据。最后一个表包含元数据,它是一对多关系(一个产品,具有相关数据的多个记录)。

有没有办法将带有值的字段 append 到现有查询的末尾,以便我仍然可以使用 mysql_fetch_array() 命令访问 PHP 中的记录集?

本质上,我想查询带有产品 ID 的任何记录,然后 append 多个 append 字段。

经过思考,我实际上想知道是否可以在记录集中包含一个数组(即元数据的结果数组)并通过 PHP 访问它?

工作查询:

SELECT offers.*, c.short_name AS sponsorName, c.logo AS sponsorLogo 
FROM offers LEFT JOIN sponsors AS c ON c.id=offers.sponsor ORDER BY end_date ASC

结果:

ID: 43875
category: 1
state: CO
city: Denver
zip: 80221
sponsor: 1
title: The coolest thing ever
duration: 2 years
price: 10
frequency:: Month

获取正确元数据的第二个查询-

SELECT mo.`name` AS meta_value FROM offer_metas 
LEFT JOIN meta_options AS mo ON mo.id = offer_metas.meta_option 
WHERE offer_id='48735' ORDER BY meta_option ASC

结果:

meta_value:
'5-10 tickets'
'General Admission'

我想将这两个字段添加到顶部记录中..但不知道如何将查询结果中的所有字段 append 到单个现有记录中。

--已解决--

查询已调整为考虑 GROUP_CONCAT,如下

SELECT
offers.*,
s.short_name AS sponsorName,
s.logo AS sponsorLogo,
GROUP_CONCAT( mn.title) titles,
GROUP_CONCAT( mo.`name`) metas
FROM offers
LEFT JOIN sponsors AS s ON s.id = offers.sponsir
INNER JOIN offer_metas ON offer_metas.offer_id = offers.id
INNER JOIN meta_options as mo ON offer_metas.meta_option = mo.id
INNER JOIN meta_names as mn ON mo.category = mn.category AND mo.cat_seq = mn.seq
ORDER BY end_date ASC

数据结果看起来不错,包括 2 个名为“标题”和“元”的字段,如下所示

titles: 'Number of Tickets,Purchased Seats'
metas: '5-10,General Administration'

现在这些..我可以在PHP中使用..并且由于它们具有相同数量的元素,我只需将它们解析为一个数组,我可以更好地使用:)

最佳答案

根据您上面的评论,听起来像 GROUP_CONCAT() 会给你你所追求的。它不会返回 meta_values作为数组,而是作为字符串(例如,每个值都用 <br/> 分隔,以便它们可以直接作为 HTML 发出):

SELECT
  offers.*,
  c.short_name AS sponsorName,
  c.logo AS sponsorLogo,
  GROUP_CONCAT(mo.name ORDER BY meta_option ASC SEPARATOR '<br/>') AS meta_values
FROM
  offers
  LEFT JOIN sponsors     AS c  ON c.id       = offers.sponsor
  LEFT JOIN offer_metas  AS o  ON o.offer_id = offers.id
  LEFT JOIN meta_options AS mo ON mo.id      = offer_metas.meta_option
ORDER BY end_date ASC;

请注意,如果您需要转义它们可能包含的任何 HTML 的元值,则需要选择不同的分隔符(可能 U+001EINFORMATION SEPARATOR TWO ?)并让 PHP 用合适的 HTML 替换该分隔符在转义任何包含的 HTML 之后。

关于MySQL 将查询结果追加到当前记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10319053/

相关文章:

php - 如何简化一个键不直接映射到 id 的复杂多对多关系?

mysql - 对具有 3 亿行和每秒 50-100 个查询的 MySQL innoDB 表的查询随机减慢

MySQL id和对应的序列join

c - 链表 append 实现在 C 中更新所有节点值

javascript - 是否可以使用 jQuery 逐个更改 div 顺序?

mysql - 报告查询中的记录日期

mysql - 快速两表搜索?

php - mysql - 将两个表右连接为一对多关系

MySQL : How to find non duplicate rows with left join?

php - 如何使用 PHP 将代码 append 到 <head> ?