Выборка записи.

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
IvanS
Сообщения: 25
Зарегистрирован: 2012.03.12, 20:33

Выборка записи.

Сообщение IvanS »

Добрый день!

Прошу помощи.

Как мне выбрать последнюю запись из таблицы?

Есть модель Fields и таблица fields.

Пробовал так:

Код: Выделить всё

$model = new Fields();
                $field = $model -> find();
echo $field->size;
 
Ничего не выводит, но запись есть
Аватара пользователя
vbolshakov
Сообщения: 32
Зарегистрирован: 2011.10.11, 16:42
Откуда: Ярославль, Москва
Контактная информация:

Re: Выборка записи.

Сообщение vbolshakov »

Код: Выделить всё

$fieldCriteria = new CDbCriteria(array(
    'order' => 't.id DESC',
    'limit' => 1
));

$field = Fields::model()->find($fieldCriteria);
IvanS
Сообщения: 25
Зарегистрирован: 2012.03.12, 20:33

Re: Выборка записи.

Сообщение IvanS »

ФУФ! Спасибо огромное!
IvanS
Сообщения: 25
Зарегистрирован: 2012.03.12, 20:33

Re: Выборка записи.

Сообщение IvanS »

Прошу прощения. Еще попутный вопрос.

Код: Выделить всё

$fields = Fields::model() -> find(array (
                                                    //'order' => 'field_id DESC',
                                                    'limit' => 1));

                $field = $fields -> field_size;

               echo var_dump($field); 
Выдает string(3) "156", что верно.

Но если оставляю 'order' => 'field_id DESC',
То результат: string(2) "56"

Почему?
IvanS
Сообщения: 25
Зарегистрирован: 2012.03.12, 20:33

Re: Выборка записи.

Сообщение IvanS »

Мой косяк. Можно закрывать. Спасибо
deadanarhist
Сообщения: 37
Зарегистрирован: 2012.10.05, 12:19

Re: Выборка записи.

Сообщение deadanarhist »

Не хотел открывать ещё одну тему, подскажите, как достать из таблицы inbox, в которой хранятся письма от пользователей, по одному последнему письму каждого пользователя.
SQL-запрос:

Код: Выделить всё

SELECT email, content, date
FROM inbox i1
WHERE date = (SELECT MAX(date) FROM `inbox` i2 WHERE i1.email = i2.email)) 
Запрос работает, но может быть корявый, конечно (поправьте, если сможете).
Вторая проблема вывести результат в GridView, в него нужно передавать объект, а не выборку...

Код: Выделить всё

public function actionIndex()
{
   $select = Inbox::model()->findAllBySql('SELECT email, content, date FROM inbox i1 WHERE date = (SELECT MAX(date) FROM inbox i2 WHERE i1.email = i2.email))');

   $this->render('index', array(
      'model'=>$select,
   ));
}
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Выборка записи.

Сообщение anton44eg »

Код: Выделить всё

SELECT email, content, date
FROM inbox i1
GROUP BY user_id
HAVING MAX(`date`) 

Код: Выделить всё

public function actionIndex()
{
   $sql = ''; // Тут вписываете запрос
   $dataProvider = new CSqlDataProvider($sql);

   $this->render('index', array(
      'dataProvider'=>$dataProvider,
   ));
}
 
deadanarhist
Сообщения: 37
Зарегистрирован: 2012.10.05, 12:19

Re: Выборка записи.

Сообщение deadanarhist »

Спасибо, но возникает ошибка:
CSqlDataProvider and its behaviors do not have a method or closure named "getValidators"
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Выборка записи.

Сообщение anton44eg »

покажите view
deadanarhist
Сообщения: 37
Зарегистрирован: 2012.10.05, 12:19

Re: Выборка записи.

Сообщение deadanarhist »

Код: Выделить всё

<?php

$this->widget('bootstrap.widgets.TbGridView', array(
    'type'=>'striped bordered condensed',
    'id'=>'mainViewgrid',
    'dataProvider'=>$model,
    'filter'=>$model,
    'columns'=>array(
        array(
            'header'=>'№',
            'value'=>'$row+1',
        ),
        array(
            'header'=>'email-адрес',
            'name'=>'email',
            ),
        array(
            'header'=>'владелец',
            'name'=>'owner',
            ),
        array(
            'header'=>'содержимоеt',
            'name'=>'content',
            ),
        array(
            'header'=>'дата получ.',
            'name'=>'date',
            ),
),
)); 
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Выборка записи.

Сообщение maleks »

Если это mysql то должен же быть конфликт имен тут:

Код: Выделить всё

SELECT email, content, date
из за date, а не `date`.
deadanarhist
Сообщения: 37
Зарегистрирован: 2012.10.05, 12:19

Re: Выборка записи.

Сообщение deadanarhist »

также я ещё применял в других столбцах 'value' , 'visible', 'type'.... но самое простое - то, что я написал выше уже не работает...
deadanarhist
Сообщения: 37
Зарегистрирован: 2012.10.05, 12:19

Re: Выборка записи.

Сообщение deadanarhist »

maleks, функции типа findAllBySql() допускают опускание таких кавычек и отрабатывают правильно.
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Выборка записи.

Сообщение anton44eg »

Код: Выделить всё

public function actionIndex()
{
   $sql = ''; // Тут вписываете запрос
   $dataProvider = new CSqlDataProvider($sql);
$model = new Indox();
   $this->render('index', array(
      'dataProvider'=>$dataProvider,
      'model'=>$model
   ));
}

Код: Выделить всё

$this->widget('bootstrap.widgets.TbGridView', array(
    'type'=>'striped bordered condensed',
    'id'=>'mainViewgrid',
    'dataProvider'=>$dataProvider,
    'filter'=>$model,
deadanarhist
Сообщения: 37
Зарегистрирован: 2012.10.05, 12:19

Re: Выборка записи.

Сообщение deadanarhist »

anton44eg, спасибо! Ты крут!!!!!!!!

Правда теперь пропали сортировки и поиск по столбцам, который вверху грида....
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Выборка записи.

Сообщение anton44eg »

сортировки можно указать в конструкторе CSqlDataProvider
фильтры вроде тоже
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Выборка записи.

Сообщение maleks »

deadanarhist писал(а):maleks, функции типа findAllBySql() допускают опускание таких кавычек и отрабатывают правильно.
Странно, не знаете за счет чего? В смысле ссылку на код который такие кавычки добавляет в тело сырого текста запроса.
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Выборка записи.

Сообщение anton44eg »

ИМХО это PDO старается
Аватара пользователя
flashimage
Сообщения: 1517
Зарегистрирован: 2011.01.23, 12:43

Re: Выборка записи.

Сообщение flashimage »

да походу prepared statement
Бранчи это гомеоморфические эндофункторы, которые мапятся на субманифолды пространства Гилберта.
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Выборка записи.

Сообщение maleks »

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