вывод данных с помощью ListView
вывод данных с помощью ListView
Пытаюсь вывести данные из нескольких таблиц с разной структурой с помощью SqlDataProvider. В таблице вакансии есть ячейка позиция и есть таблица проекты в ней есть ячейка название вот эти данные нужно вывести в одном списке с помощью ListView. Что то не получается)
Re: вывод данных с помощью ListView
Контроллер
$uid = Yii::$app->user->identity->uid;
$count = Yii::$app->db->createCommand('SELECT COUNT(*) FROM vacancy, project WHERE vacancy.uid=:uid OR project.uid = :uid', [':uid' => $uid])->queryScalar();
$dataProvider = new SqlDataProvider([
'sql' => 'SELECT vacancy.uid, vacancy.position, vacancy.vid, project.uid, project.pid, project.title FROM vacancy, project WHERE vacancy.uid = :uid OR project.uid = :uid',
'params' => [':uid' => $uid],
'totalCount' => (int)$count,
'pagination' => ['pageSize' => 20]]);
return $this->render('index', [
'dataProvider' => $dataProvider
]);
Таблицы
CREATE TABLE IF NOT EXISTS `project` (
`uid` int(10) DEFAULT NULL,
`pid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) CHARACTER SET utf8 NOT NULL,
`salary` int(10) DEFAULT NULL,
`paymentfor` int(3) DEFAULT NULL,
`content` longtext CHARACTER SET utf8 NOT NULL,
`region` tinyint(3) DEFAULT NULL,
`city` tinyint(3) DEFAULT NULL,
`scope` int(9) NOT NULL,
`status` int(1) NOT NULL,
`expire` int(11) DEFAULT NULL,
`edited` int(11) DEFAULT NULL,
`created` int(11) NOT NULL,
PRIMARY KEY (`pid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `vacancy` (
`uid` int(10) unsigned NOT NULL,
`vid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`position` int(10) NOT NULL,
`salary` int(10) DEFAULT NULL,
`company` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
`experience` tinyint(3) DEFAULT NULL,
`employment` int(3) DEFAULT NULL,
`content` longtext CHARACTER SET utf8 NOT NULL,
`region` tinyint(3) DEFAULT NULL,
`city` tinyint(3) DEFAULT NULL,
`scope` int(9) NOT NULL,
`status` int(1) NOT NULL,
`expire` int(11) DEFAULT NULL,
`edited` int(11) DEFAULT NULL,
`created` int(11) NOT NULL,
PRIMARY KEY (`vid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
В обоих таблицах есть записи, но выводится одна запись и она повторяется 6 раз или 3 раза в зависимости от количества записей в обоих таблицах.
$uid = Yii::$app->user->identity->uid;
$count = Yii::$app->db->createCommand('SELECT COUNT(*) FROM vacancy, project WHERE vacancy.uid=:uid OR project.uid = :uid', [':uid' => $uid])->queryScalar();
$dataProvider = new SqlDataProvider([
'sql' => 'SELECT vacancy.uid, vacancy.position, vacancy.vid, project.uid, project.pid, project.title FROM vacancy, project WHERE vacancy.uid = :uid OR project.uid = :uid',
'params' => [':uid' => $uid],
'totalCount' => (int)$count,
'pagination' => ['pageSize' => 20]]);
return $this->render('index', [
'dataProvider' => $dataProvider
]);
Таблицы
CREATE TABLE IF NOT EXISTS `project` (
`uid` int(10) DEFAULT NULL,
`pid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) CHARACTER SET utf8 NOT NULL,
`salary` int(10) DEFAULT NULL,
`paymentfor` int(3) DEFAULT NULL,
`content` longtext CHARACTER SET utf8 NOT NULL,
`region` tinyint(3) DEFAULT NULL,
`city` tinyint(3) DEFAULT NULL,
`scope` int(9) NOT NULL,
`status` int(1) NOT NULL,
`expire` int(11) DEFAULT NULL,
`edited` int(11) DEFAULT NULL,
`created` int(11) NOT NULL,
PRIMARY KEY (`pid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `vacancy` (
`uid` int(10) unsigned NOT NULL,
`vid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`position` int(10) NOT NULL,
`salary` int(10) DEFAULT NULL,
`company` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
`experience` tinyint(3) DEFAULT NULL,
`employment` int(3) DEFAULT NULL,
`content` longtext CHARACTER SET utf8 NOT NULL,
`region` tinyint(3) DEFAULT NULL,
`city` tinyint(3) DEFAULT NULL,
`scope` int(9) NOT NULL,
`status` int(1) NOT NULL,
`expire` int(11) DEFAULT NULL,
`edited` int(11) DEFAULT NULL,
`created` int(11) NOT NULL,
PRIMARY KEY (`vid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
В обоих таблицах есть записи, но выводится одна запись и она повторяется 6 раз или 3 раза в зависимости от количества записей в обоих таблицах.
Re: вывод данных с помощью ListView
вопрос заключается в исправлении sql-запроса? sql-запрос выдает одно, но выводится другое или выводится то же что возвращает запрос?
Re: вывод данных с помощью ListView
Запрос ошибочный, я не знаю как построить запрос так чтоб на выходе был единый список из вакансий и проектов.
Во первых я получаю не верный список. Во-вторых представлении для названия ссылки я буду использовать либо $model['position'] либо $model['title'] а в соответствующих таблицах нет таких ячеек
Во первых я получаю не верный список. Во-вторых представлении для названия ссылки я буду использовать либо $model['position'] либо $model['title'] а в соответствующих таблицах нет таких ячеек
Последний раз редактировалось dadids 2014.08.30, 20:41, всего редактировалось 1 раз.
Re: вывод данных с помощью ListView
правильно поставленный вопрос - половина ответа.dadids писал(а):Запрос ошибочный, я не знаю как построить запрос так чтоб на выходе был единый список из вакансий и проектов
делайте запрос в таком виде:
Код: Выделить всё
select vacancy.uid as field1, vacancy.position as field2, vacancy.vid as field3 from vacancy where vacancy.uid = :uid union select project.uid as field1, project.pid as field2, project.title as field3 from project where project.uid = :uid'
Если я неправильно вас понял, приведите примеры данных и желаемый вид списка
Re: вывод данных с помощью ListView
Зеленин, спасибо большое. Есть небольшие шероховатости, но это мелочи сам справлюсь. Спасибо