我有一个成功的查询,当前返回除一个表以外的所有数据。最后一个表格包含元数据,它是一对多关系(一个产品,多个包含相关数据的记录)。MySQL将查询结果追加到当前记录?
有没有办法到现场追加了价值的现有查询的末尾,这样我仍然可以用mysql_fetch_array()命令访问PHP记录集?
基本上我想查询的产品ID的任何记录,然后再追加多个附加字段。
想着它其实我在想,如果我可以包括设置(即结果的数组的元数据)和访问,通过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'
我想这两个字段添加到记录上去顶..但不知道如何将查询结果中的所有字段添加到一个已经存在的记录。
--SOLVED--
查询已调整为占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场名为 “标题” 和 “METAS”看起来像这样
titles: 'Number of Tickets,Purchased Seats'
metas: '5-10,General Administration'
现在这些..我可以在PHP中工作..因为他们有相同数量的元素,我只是将它们解析成一个数组,我可以更好地处理:)
我试着做多左联接做到这一点..但它不停地复制产品记录我离开每个加盟“元”价值...试图保持它在一个记录。 – Silvertiger 2012-04-25 15:45:51
我不认为这是可能的;最接近的可能是使用'GROUP_CONCAT'将第二个查询的结果合并为单个记录,然后在PHP中使用相同的分隔符'爆炸'。另一方面,如果第一个查询中的每条记录都在第二条记录中产生了相同数量的记录,那么您可以*将第二条查询转到第一条查询的末尾(尽管由于MySQL没有任何原生支持枢轴转动,这将是一个相当丑陋的手动黑客) - 但你为什么要这样做?现状有什么问题? – eggyal 2012-04-25 15:54:01
主要我想显示在一个表中的结果..我不能设置PHP/HTML的列宽度等,因为有每个元数据的列... :(...如果我拥有它的一切在一条记录中..问题解决了 – Silvertiger 2012-04-25 16:09:07