2011-01-10 7 views
0

私は誰でも手助けが必要です。関連する写真をアーティストに並べ替える - PHP/MySQL

私は2つのJOiN-sを作った。事実として、私は製品iformationsのアーティスト名(M)

  • 表と3つの表

    1. テーブルが、この場合のピクチャーアドレス(P)
    2. 製品のアーティストとIDのIDを持つテーブル。 (PMX)

    ここSELECT文があります:

    SELECT 
        m.manufacturer_id , 
        m.mf_name , 
        p.product_id , 
        p.product_full_image 
    FROM 
        jos_vm_product_mf_xref AS pmx 
    JOIN 
        jos_vm_manufacturer AS m ON m.manufacturer_id = pmx.manufacturer_id 
    JOIN 
        jos_vm_product AS p ON p.product_id = pmx.product_id 
    WHERE 
        m.mf_chars = 'm' 
    

    私が達成しようとしている効果がhttp://www.ugallery.com/ArtistList.aspx?RC= [上のようなものです1] [1]

    、実際に私は取得しています:

    1. 名1 - PROD1
    2. 名1 - PROD2
    3. 0123を
    4. Name2は - PROD1
    5. 名1 - PROD3

    私はそれをしたい、foreachの後(なめらか)を取得するには、{なめらか}:

    1. 名1 - PROD1 PROD2、PROD3
    2. Name2は - がprod1 PROD2
    3. NAME3 ....など

      <ul> 
      <?php foreach ($this->artistlist as $item) 
            { ?> 
          <li><a href="index.php?option=com_virtuemart&page=shop.browse&manufacturer_id=<?php echo $item->manufacturer_id; ?>"><?php echo $item->mf_name; ?></a> 
      
          <a href="index.php?page=shop.product_details&flypage=flypage.tpl&product_id=<?php echo $item->product_id; ?>&option=com_virtuemart"> 
           <img src="components/com_virtuemart/shop_image/product/<?php echo $item->product_full_image; ?>" height="75px"> 
          </a> 
      
          </li> 
      <?php } ?> 
      </ul> 
      
    4. だから、

    これは私が今の使っているPHPコードです...

    PLZ、plzは、plzは....誰も私を助けることができますか?

    ここでコード

    foreach ($this->artistlist as $picture) { 
        if(!isset($artists[$picture['manufacturer_id']])) { <---this is line 22 
         $artists[$picture['manufacturer_id']] = array(
         'name'=>$picture['mf_name'] 
        ); 
        } 
    

    そう...エラーの一部です:警告:foreachのために供給無効な引数()Dで:\サーバー\ xamppの\ htdocsに\ \コンポーネントTA com_artists \ビュー\は、 \アーティスト\ TMPL \ default.php ライン上の35

    foreachの($などのアーティスト[ '画像'] $ pictureId => $ pictureFullImage){< ---ライン35

    そして別の追加の質問:

     <ul> 
        <li> 
         <a href="/ta/index.php?option=com_virtuemart&amp;page=shop.browse&amp;manufacturer_id=3">Giorgi Mihkeil</a> 
    
    **</li><li>** <--- and, can we get rid of this pieces? *<a href="/ta/index.php?option=com_virtuemart&amp;page=shop.browse&amp;manufacturer_id=$picture->artist_id"></a>* <-- what is this link? where does it come from?  
        <a href="/ta/index.php?page=shop.product_details&amp;flypage=flypage.tpl&amp;product_id=1&amp;option=com_virtuemart"> 
         <img src="/ta/components/com_virtuemart/shop_image/product/Lonely_Boat_4cfa773e83874.jpg" height="75px"> 
        </a> <a href="/ta/index.php?page=shop.product_details&amp;flypage=flypage.tpl&amp;product_id=2&amp;option=com_virtuemart"> 
         <img src="/ta/components/com_virtuemart/shop_image/product/Naked_Couple_4cfbd12805f5b.jpg" height="75px"> 
        </a> <a href="/ta/index.php?page=shop.product_details&amp;flypage=flypage.tpl&amp;product_id=4&amp;option=com_virtuemart"> 
         <img src="/ta/components/com_virtuemart/shop_image/product/Lonely_Boat_4d246dbef30e1.jpg" height="75px"> 
        </a></li></ul> 
    

    今このHTMLギブのなめらかのように:<ul><li>NAME </li><li> <img1><img2><img3> </li></ul> は、我々は次のようになめらかを得ることができます:<ul><li>NAME <img1><img2><img3> </li></ul>彼は、HTMLはこのようなものですoutputed?

  • 答えて

    0

    すでに配列にあなたの写真を持っていると仮定:だけでなく、それだけで、アーティストのIDを格納していないため、

    $artists = array(); 
    
    foreach($pictures as $picture) { 
        if(!isset($artists[$picture['manufacturer_id']])) { 
         $artists[$picture['manufacturer_id']] = array(
         'name'=>$picture['mf_name'] 
        ); 
        } 
    
        $artists[$picture['artist_id']]['pictures'][$picture['product_id']] = $picture['product_full_image']; 
    } 
    
    foreach($artists as $artistId=>$artist) { 
        echo $artist['name'].': '; 
        foreach($artist['pictures'] as $pictureId=>$pictureFullImage) { 
         echo "<img src='{$pictureFullImage}' />"; 
        } 
    } 
    

    これは少し複雑dqhendricksによって提示された解決策よりも彼/彼女の名前。つまり、配列の追加層が必要です。

    下記のあなたのコメントに基づいて:http://pastebin.com/2Cuyvp3U - 私はこれを行うべきだと思いますか?あなたが突然導入されたmf_priorフィールドが何であるか分かりません...

    +0

    wow ...そのような高速返信ありがとうございます! 私はこのコードを使用しました...そしてそれは私にフリーリスト行のエラーを与えます - foreach - foreach()に対して無効な引数が与えられました。 だから私は少しダムを再生するかもしれませんが、このコードではわからないことがいくつかあります... 私はforeachでこの配列を持っています - foreach($ this-> artistlist $アイテム)$アイテムとして.... – mrGott

    +0

    あなたなら歓迎:) – kander

    +0

    <?phpのforeachの(の$ this - > artistlist) \t \t \t \t \t {?> \t \t \t

  • mf_name; ?> \t \t \t \t \t \t \t \t \t \t mf_prior; ?> \t \t \t \t \t \t \t \t \t
  • \t \t これは私のコードです.... – mrGott

    0

    は、Anは、クエリは、あなたのforeach文に解析するためにはるかに容易になります注文

    ORDER BY m.manufacturer_id ,p.product_id 
    

    あなたのクエリに順に追加します。

    1

    通常、これにはGROUP_CONCATを使用します。

    SELECT 
        m.mf_name , 
        GROUP_CONCAT(p.product_id), 
        p.product_full_image 
    FROM 
        jos_vm_product_mf_xref AS pmx 
    JOIN 
        jos_vm_manufacturer AS m ON m.manufacturer_id = pmx.manufacturer_id 
    JOIN 
        jos_vm_product AS p ON p.product_id = pmx.product_id 
    WHERE 
        m.mf_chars = 'm' 
    GROUP BY m.mf_name 
    

    しかし、あなたは写真を選択している場合、あなたはそれを使用することはできません、あなたはハッシュを使用して、アプリケーションの言語でそれを行う必要があるでしょう。

    +0

    私の最初の反応はGROUP_CONCATも同様です... PHPがGROUP_CONCAT結果を解析して処理することができればIMGタグ。 – kander

    +0

    ええ、私はすでにそれを試みましたが、実際にこのクエリをMySQLのクエリタブに入れると、そのアーティストの1つのイメージしか得られません。 – mrGott

    0

    このPHP側を処理することができます。 seudoコードで。

    $record_list = array(); 
    while ($row_result) { 
        if (!array_key_exists($row_result['name'], $record_list)) { 
         $record_list[$row_result['name']] = array(); 
        } 
        $record_list[$row_result['name']][] = $row_result['value']; 
    } 
    var_dump($record_list); 
    

    これは、探している形式で多次元配列を作成します。

    関連する問題