嗨,我在我的新闻网站上为我的投资组合制作了一个图库,但出现了一个小故障。我正在尝试选择一个不同的库,这样它就不会重复,这是我迄今为止拥有的代码
function viewgalleries() {
$viewgalleries = $this->Gallery->find('all', array(
'fields' => 'DISTINCT Gallery.gallery_name'));
if (!empty($this->request->params['requested'])) {
return $viewgalleries; }
$this->set('gallery', $viewgalleries);
}
这是我的观点。。
<?php $viewgalleries = $this->requestAction('/Galleries/viewgalleries');?>
<div class="allgalleries">
<table class="galleries">
<?php foreach ($viewgalleries as $galleries): ?>
<tr>
<td>
<span class="gallerylink">
<?php echo $this->Html->link($galleries['Gallery']['gallery_name'],
array('controller' => 'Gallery', 'action' => 'view',
$galleries['Gallery']['id'])); ?>
</span>
</td>
</tr>
<?php endforeach; ?>
</table>
</div>
这给了我想要的东西,但它没有选择表中的id字段,所以它给了我这个错误。。。
Notice (8): Undefined index: id [APP/View/Galleries/viewgalleries.ctp, line 10]
下面确实显示了画廊的名称2012年欧洲冠军联赛决赛
关于我如何仍然可以从数据库中选择id,有什么想法吗??
提前感谢或任何帮助。
尝试更改查找中的字段参数键,如下所示:
'fields' => array('DISTINCT Gallery.gallery_name, Gallery.id')
这对你有用。请询问它是否无效。
通过如下方式更改查找中的fields
键:
'fields' => array('DISTINCT Gallery.gallery_name', 'Gallery.id')
你也可以试试:
$this->ModelName->query('SELECT
DISTINCT Gallery.gallery_name,
Gallery.id
FROM kickoff.galleries
AS Gallery WHERE 1 = 1');
此外,还有另一种解决方法可以解决您的问题。作为以下将产生与SELECT DISTINCT相同的结果集:
select * from TABLE group by FIELDNAME having count(FIELDNAME)>=1;
所以在你的情况下应该是:
SELECT Gallery.id, Gallery.gallery_name
FROM kickoff.galleries
GROUP BY Gallery.gallery_name
HAVING COUNT(Gallery.gallery_name)=>1
但请记住,COUNT()不计算NULL值,因此,如果您通过具有NULL值的字段来计算值,则COUNT)不会对这些行进行计数。这里最好的选择是在表声明中使用"NOT NULL"。
我没有使用select distinct函数,因为它被证明是非常棘手的,而是决定重新格式化我的图库。我添加了一些验证技术,如isUnique,以便允许传递相同的图库名称,这是在Models/gallery.php中通过以下语句实现的:
public $validate = array(
'gallery_name' => array(
'rule' => 'isUnique',
'message' => 'This gallery already exists.'));
希望这能帮助其他人。