0

嗨,我在我的新闻网站上为我的投资组合制作了一个画廊,但是有一个小故障。我正在尝试选择一个不同的画廊,这样它就不会重复自己,这是我到目前为止的代码

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 的任何想法?

在此先感谢或任何帮助。

4

3 回答 3

0

Тryfields像这样更改 find 中的键:

'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”。

于 2012-07-14T18:49:59.790 回答
0

尝试更改 find 中的 fields 参数键,如下所示:

'fields' => array('DISTINCT Gallery.gallery_name, Gallery.id')

这对你有用。请问它是否不起作用。

于 2012-07-16T05:34:07.790 回答
0

我没有使用 select distinct 函数,因为它被证明非常棘手,而是决定重新格式化我的画廊,我添加了诸如 isUnique 之类的验证技术,以便允许传递相同的画廊名称,这是在模型/画廊中实现的.php 带有以下语句:

public $validate = array(
    'gallery_name' => array(
        'rule' => 'isUnique',
        'message' => 'This gallery already exists.'));

希望这对其他人有帮助。

于 2012-08-08T14:09:58.200 回答