Как написать эти запросы в zend db

#php

#php

Вопрос:

 select test.*, 
       user.*,
       count(test_stats.test_public_id) as past_day_views,
       test_stats.test_public_id   
  from test 
  join user
  join test_stats
 where test.user_id=user.user_id 
   and test.test_public_id=test_stats.test_public_id
   and test_stats.updated_on > DATE_SUB(CURDATE(), INTERVAL 1 DAY)
 group by test_stats.test_public_id
 order by title

select count(test_public_id) as total_views
  from test_stats
 where test_public_id ='$tourid'
  

Эти запросы для просмотров на прошлой неделе извлекаются, поскольку я не очень хочу снова запрашивать эти запросы
Пожалуйста, окажите мне и эту услугу

 select count(ms.test_public_id) as total_views, ms1.recent_views from test_stats ms
join (select count(test_stats.test_public_id) as recent_views from test_stats
where test_stats.test_public_id = '$tourid' and test_stats.updated_on > DATE_SUB(CURDATE(), INTERVAL 7 DAY)) ms1 where ms.test_public_id ='$tourid'

SELECT * FROM user WHERE activation = '0' AND user_id >1

select * from test where user_id ='$user_id' and test.url is not null
  

Комментарии:

1. Похоже, проблема скорее в sql, чем в php. Кроме того, было бы очень полезно некоторое описание того, что вы пытаетесь сделать, и некоторое форматирование запроса.

2. Пожалуйста, ознакомьтесь с документацией Zend Framework по адресу framework.zend.com/manual/en/zend.db.select.html

Ответ №1:

Ваш JOINS / WHERE в корне неверен. Я это исправлю. Но в вашей модели создайте функцию, которая делает это:

 class MyModel extends Zend_Db_Table_Abstract
{
    // ...
    public function getSomeData()
    {
        $cols = array(
            'test.*',
            'user.*',
            'count(test_stats.test_public_id) as past_day_views',
            'test_stats.test_public_id'
        );
        $select = $this->select()
            ->setIntegrityCheck(false)
            ->from('test', $cols)
            ->join('user', 'user.user_id = test.user_id', array())
            ->join('test_states', 'test_stats.test_public_id = test_stats.test_public_id', array())
            ->where('test_stats.updated_on > DATE_SUB(CURDATE(), INTERVAL 1 DAY)')
            ->group('test_stats.test_public_id')
            ->order('title');

        return $this->fetchAll($select);
    }
  

А теперь второй запрос:

 $select = $this->select()
    ->from('test_stats', array('count(test_public_id) AS total_views'))
    ->where('test_public_id = ?', $tourid);

return $this->fetchAll($select);