为艺术家排序相关图片-PHP/MySQL

为艺术家排序相关图片-PHP/MySQL,php,mysql,Php,Mysql,我需要任何人的帮助,我会非常感激的 我已经做了两个JOiN-s。事实上,我有三张桌子 艺术家姓名表(m) 带有产品标识的表格,在本例中为图片地址(p) 具有艺术家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

我需要任何人的帮助,我会非常感激的

我已经做了两个JOiN-s。事实上,我有三张桌子

  • 艺术家姓名表(m)
  • 带有产品标识的表格,在本例中为图片地址(p)
  • 具有艺术家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
  • 名称1-产品2
  • 名称2-产品1
  • 名称1-产品3
  • 我希望它在foreach(smth){smth}之后得到:

  • 名称1-产品1产品2,产品3
  • 名称2-产品1产品2
  • 名字3……等等

    <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>
    
  • 这是我现在正在使用的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($this->artistlist as$picture){
    如果(!isset($artists[$picture['manufacturer_id']]){$picture['mf_name']
    );
    }
    
    因此…错误:警告:在第35行的D:\Server\xampp\htdocs\ta\components\com\u artists\views\artists\tmpl\default.php中为foreach()提供的参数无效


    foreach($artist['pictures']作为$pictureId=>$pictureFullImage){在查询中添加一个orderby

     ORDER BY  m.manufacturer_id ,p.product_id
    
    在foreach循环上解析有序查询要容易得多。

    通常,您会使用它

    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
    

    但是如果你选择图片,你不能使用它,你必须用你的应用程序语言,使用散列来完成它。

    你可能想要处理这个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);
    

    这将以您正在寻找的格式创建多维数组。

    假设您的图片已经在数组中:

    $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}' />";
       }
    }
    
    $artists=array();
    foreach($pictures作为$picture){
    如果(!isset($artists[$picture['manufacturer\u id']])){
    $artists[$picture['manufacturer\u id']]=数组(
    'name'=>$picture['mf_name']
    );
    }
    $artists[$picture['artist_id']['pictures'][$picture['product_id']]=$picture['product_full_image'];
    }
    foreach($artistId=>$artist的艺术家){
    echo$artist['name'].:';
    foreach($artist['pictures']作为$pictureId=>$pictureFullImage){
    回声“;
    }
    }
    
    这比dqhendricks提出的解决方案要复杂一些,因为它不仅存储艺术家的ID,还存储他/她的名字。这意味着还涉及到一个额外的数组层


    根据您下面的评论:-我认为应该这样做?不知道您突然引入了什么mf_prior字段…

    wow…感谢您如此快速的回复!!!我使用了此代码…它给了我一个错误,第一行-foreach-表示为foreach()提供的参数无效.所以..我现在可能会玩小达姆…但是有些事情我无法通过这段代码弄清楚…我在foreach-foreach($this->artistlist as$item)中有这个数组…这是我的代码…可能想在你的问题中添加这一点-评论中的代码往往会以可怕的格式引用;)有什么想法如何根据你的代码使我的网站工作吗?这真的让我很痛苦…我已经想了两天了,我在这个网站上找到了与你类似的代码,但无法调整它以适应我的情况。…根据您刚才添加到问题中的内容,更新了我的答案,并添加了一个pastebin链接:)我的第一个反应是GROUP_CONCAT…如果您能够在PHP中解析GROUP_CONCAT结果,并对其进行处理,使其填充IMG标记,则可能仍然有效。是的,我已经尝试过了,但实际上在将此查询放入MySQL的查询选项卡时,我仅获取该艺术家的一张图像
    $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}' />";
       }
    }