質問
私はこれまでPHPで一対一の関係を扱ってきましたが、私は1対多の関係を必要とする問題にこだわっています。私は運で数日間、この上に座ってきたので、私は中のステップと、私は私の心を失う前に、私の解決策を表示するために誰かのために必死だ。
私のデータベースに異なるテーブルから、様々な他のフィールドと一緒にSELECTクエリによって受信されたURL、一連のを持っています。すべてのURLは、それに関連付けられた少なくとも1つのカテゴリがありますが、複数のカテゴリを持つことができます。
:だから私の結果に私は少し、このようなものが表示されることがありますlink_id = 3 url= 'http://www.somesite1.com' category = 'uncategorised'
link_id = 4 url= 'http://www.somesite2.com' category = 'travel'
link_id = 4 url= 'http://www.somesite2.com' category = 'fun'
link_id = 4 url= 'http://www.somesite2.com' category = 'misc'
link_id = 3 url= 'http://www.somesite3.com' category = 'uncategorised'
私は一種の、仕事にこれを持っています。とき、私はループを通過すると、whileループとmysqlは、配列をフェッチ使用して、それらをオフに印刷し、その結果は、それが上記まったく同じように見えます。私はそれが何かを読むことで必要なものを除いて、素晴らしい厥ます:
link_id = 4 url = 'http://www.somesite2.com' category = 'travel fun misc'
彼らがプリントアウトされ、基本的に全ての各URLのカテゴリのは、何らかの形で組み合わせて得られるように。私の最初の試みは、ネストしたwhileループをしようとする私を導いたが、それはうまくいきませんでしたし、私はこれが実現可能であるかはわかりません。別に私は多次元配列が必要になる場合があります場合、私は思ったんだけどそれから(完全な推測を、私は前に1を使用していたことがありません)。
私が思う...そして、私は複数のカテゴリを持っている何かを持っている -私は、上記のようにリンクIDによって、これらの結果を注文していますので、現在のループ反復内のリンクIDは、最後の反復で1と一致した場合、私は知っています私は実際に近いんだけど、私はちょうどそれを把握することはできません。
任意のアイデア?
解決
MySQLで「GROUP_CONCAT」機能もあります。 それはあなたが達成したいかを正確に行う必要があります。
のような何かます:
SELECT url, GROUP_CONCAT(category) AS categories FROM yourtable GROUP BY url
他のヒント
あなたは、接続テーブルを使用する必要があります。
第1回あなたがリンクのテーブルを持っている。
id = 1 url = something
id = 2 url = something else
そして、あなたがカテゴリのテーブルを持っている。
id = 1 category = something
id = 2 category = something else
そして、あなたが接続テーブルを持っている。
url_id = 1 category_id = 1
url_id = 1 category_id = 2
url_id = 2 category_id = 1
これは、少なくとも、あなたが始める必要があります。
あなたはコントロールブレークアルゴリズムを使用する必要があります。
set last_link variable to null
set combined_category to null
exec query
loop over result set {
if last_link == null {
last_link=fetch_link
}
if fetch_link==last_link {
set combined_category+=ltrim(' '.fetch_category)
} else {
display html for last_link and combined_category
set last_link=fetch_link
set combined_category=fetch_category
}
}//loop
display html for last_link and combined_category
私は一般的な「仕事」のイベントとして「表示のhtml」を使用して、あなたが配列構造にこれを押し出すことができ、などの代わりに...
の値を介してID及びURL反復をキー配列を使用し、次のように追加します。
$link_categories[ $id ] .= $category." ";
$result = mysql_query("SElECT * FROM LINKS");
$link_categories = array();
while ($row = mysql_fetch_array($result,MYSQL_ASSOC))
{
if (!isset($link_categories[$row['link']]))
$link_categories[$row['link']] = " ";
else
$link_categories[$row['link']] .= " ";
$link_categories[$row['link']] .= $row['category'];
}
print_r($link_categories);
の業績ます:
Array
(
[http://a.com] => test evaluate performance
[http://b.com] => classify reduce
[http://c.com] => allocate
)
このは、これを行うの「正しい」方法ではありません - 実際に関係が規定されるべきです 1対多の関係に別々のテーブル。