1

我想创建一个照片库,左侧显示同一类别的所有图片,右侧显示评论。mycategory/example001.jpg图像在我的数据库中jkm_image的列中的表中存储为路径(例如 :) filename。评论存储在表jkm_contentintrotext

这两个表不相关。

我被困在“foreach”步骤上,因为它首先检索所有图像,然后检索所有评论,所以我最终得到类似

an image 
an image
an image 
...
a comment
a comment
a comment

或者

an image, an image, an image 
an image, an image, an image
...
a comment, a comment, a comment
a comment, a comment, a comment

但我想要 :

an image, a comment 
an image, a comment 
an image, a comment 
...

这是php:

<?php
define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(__FILE__) );//this is when we are in the root
define( 'DS', DIRECTORY_SEPARATOR );

require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();
$db = &JFactory::getDBO(); //Your database object is ready
$db2 = &JFactory::getDBO();?>
<div class="backend">
<?php 
$query = "SELECT introtext FROM jkm_content WHERE catid=58"; //--------feeds
$db->setQuery( $query );
$feeds= $db->loadObjectList();
foreach ($feeds as $item):
?> 
<div class="comment"><?php echo $item->introtext; ?></div>
<?php endforeach; ?>
<?php 
$query2 = "SELECT filename FROM jkm_phocagallery WHERE catid=2";// -------pictures
$db2->setQuery( $query2 );
$pictures= $db2->loadObjectList();
foreach ($pictures as $item2):
?> 
<div class="image"><img src="/images/phocagallery/<?php echo $item2->filename; ?>" >
</div>
<?php endforeach; ?>
</div>

CSS:

.backend {
position: absolute;
width: 1000px;
}

.image {
float:left;
width: 600px;
}

.comment {
float:right;
width: 400px;
}

我对 php 世界很陌生,我不知道我是否做对了。也许“foreach”不是我应该使用的功能。

非常感谢你的帮助!

4

2 回答 2

1

如果它们是相关表,则应该在表之间使用 Inner Join 连接,而不是联合 http://dev.mysql.com/doc/refman/5.0/es/join.html

SELECT filename FROM jkm_image  as jkm Inner join introtex as intro on intro.id = jkm. id WHERE catid=2

或者您可以向数据库发出两个请求

<?php
$query = "SELECT introtex FROM jkm_content WHERE catid=58";
$db->setQuery( $query );
$feed= $db->loadObjectList();
foreach ($feed as $item):
?><div style="float:left; width: 200px;"><?php echo $item->introtex; ?><?php
$query2 = "SELECT filename FROM jkm_image WHERE catid=2";
$db2->setQuery( $query2 );
$feed2= $db2->loadObjectList();
foreach ($feed2 as $item2):
?>
<div style="float:left ; width: 200px;"><img src="/images/phocagallery/<?php echo $item2->filename; ?>" ></div>
<?php endforeach; ?>
</div>
<?php endforeach; ?>
于 2013-10-18T09:52:11.780 回答
0

伪代码:

第 1 步:$mylist = query(SELECT id FROM mytable WHERE (你的条件)...)

第2步:

$mypics=array();//an empty box

foreach($idlist as $id){
    $thispic=//run your query - I'd use PDO FETCH_ASSOC
    array_push($mypics,$thisquery);
} 

现在 $mypics 是一个完整的盒子(一个关联数组......)

foreach ($mypics as $pic){
    echo $pic['img'];
    echo $pic['title'];
}

您需要添加一些语法和图像标签等等,但这是您可以做到的一种方式。

PS:这里有 3 种语言在线: <div style="float:left ; width: 200px;"><img src="/images/phocagallery/<?php echo $item->filename; ?>" >

如果您完全避免内联样式并尽力将您的 php 和 html 分开,那么未来的维护者会更开心。

于 2013-10-18T09:45:52.383 回答