私は現在、1つのテーブルを除くすべてのデータを返す正常なクエリを持っています。最後の表には、1対多の関係(1つのプロダクト、関連するデータを持つ複数のレコード)であるメタデータが含まれています。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
2番目のクエリ権メタデータ - を取得
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'
私はトップまでのレコードにこれらの二つのフィールドを追加したい..しかし、単一の既存のレコードにクエリ結果内のすべてのフィールドを追加する方法がわかりません。
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つのフィールドを含む、良いを見て、次のように
--SOLVED--
クエリがGROUP_CONCATを考慮して調整されてきた "メタ情報"このように見えるのは
titles: 'Number of Tickets,Purchased Seats'
metas: '5-10,General Administration'
今はTHOSE ..私はPHPで動くことができます。そして、彼らは要素の数が同じであるので、配列で解析してよりうまくいくでしょう:)
これを達成するために複数の左結合を試みましたが、結合した各「メタ」値の製品レコードを複製していました... 1つのレコードに保持しようとしました。 – Silvertiger
これは可能だとは思わない。一番近いのは 'GROUP_CONCAT'を使用して2番目のクエリの結果を1つのレコードに結合し、PHPで同じ区切り文字で' explode'することです。一方、最初のクエリのすべてのレコードが2番目のクエリで同じ数のレコードを生成する場合、2番目のクエリを最初のクエリの最後にピボットすることができます(ただし、MySQLにはネイティブサポートがありませんピボットする、これはむしろ醜い手動のハックでなければなりません) - しかし、なぜこれをしたいですか?現状の何が問題なの? – eggyal
主に私はテーブルに結果を表示したいと思います。カラムの幅などのためにphp/htmlを設定することはできません。それぞれのメタデータの列があるからです。 – Silvertiger