为艺术家排序相关图片-PHP/MySQL
我需要任何人的帮助,我会非常感激的 我已经做了两个JOiN-s。事实上,我有三张桌子为艺术家排序相关图片-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
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]
事实上,我得到的只是:
<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>
-
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}' />";
}
}