質問

私はこれまで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対多の関係に別々のテーブル。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top