Как сделать так чтоб search работала для таблиц movie и serial?
0
как можно реализовать поиск так чтоб искал вовсех таблицах а не только в movie?
у меня отдельно таблицы movie,serial,aniamtion?
3 ответов
1
Через UNION можно, такой синтаксиc на SQL:
SELECT name FROM movie WHERE `movie`.`name` LIKE '%Интерстеллар%'
UNION
SELECT title FROM serial WHERE `serial`.`name` LIKE '%Интерстеллар%'
У меня нет таблицы serial, у меня как в уроках в movie и сериалы и фильмы. И есть как уроках posts таблица и в sql когда пробовал этот пример, писал вместо `serial`.`name` для posts - `posts`.`title`, получилось так:
Интерстеллар
Как снимали Интерстеллар
Первый - это для movie, второй для posts.
Ну и потом нужно из SQL переписать для PHP, примерно так:
<?php
$mysqli = new mysqli('127.0.0.1', 'root', '', 'kinomonster');
if (mysqli_connect_errno()) {
print_f("Соединение не установлено", mysql_connect_error());
exit();
}
$mysqli->set_charset('utf8');
$sql = "SELECT movie.name as mname FROM movie WHERE `movie`.`name` LIKE '%Интерстеллар%'
UNION
SELECT posts.title as ptitle FROM posts WHERE `posts`.`title` LIKE '%Интерстеллар%'";
$query = $mysqli->query($sql);
if ($mysqli->error) {
echo "MySQL error: " . $mysqli->error;
}
$res = $query->fetch_all(MYSQLI_ASSOC);
// print_r($res);
?>
<?php foreach ($res as $key => $value): ?>
<?php foreach ($value as $key2 => $value2): ?>
<?php echo $value2; ?><br>
<?php endforeach; ?>
<?php endforeach; ?>
Вывод в браузере:
Интерстеллар
Как снимали Интерстеллар
0
и все работает но что делать если у меня три таблицы а не однa movie
Я же пример написал на две таблицы, третью таблицу также добавлять:
$sql = "SELECT movie.name as mname FROM movie WHERE `movie`.`name` LIKE '%Интерстеллар%'
UNION
SELECT posts.title as ptitle FROM posts WHERE `posts`.`title` LIKE '%Интерстеллар%'
UNION
SELET ЗАПРОС К ТРЕТЕЙ ТАБЛИЦЕ
..............
UNION
SELECT ЗАПРОС К ТРЕТЕЙ ПЯТИСОТОЙ ТАБЛИЦЕ
";
Погугли UNION в SQL и как в codeigniter запросы sql делать почитай.
0
я создал модель как в видео
<?php
class Search_model extends CI_Model {
public function search($q) {
$array_search = array(
'name' => $q,
'descriptions' => $q
);
$query = $this->db
->or_like($array_search)
->limit(100)
->get('movie');
return $query->result_array();
}
}
потом контроллер как в видео
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Search extends MY_Controller {
public function __construct() {
parent::__construct();
}
public function index() {
$this->data['title'] = "Search";
$this->load->model('search_model');
$this->data['search_result'] = array();
if($this->input->get('q_search')) {
$this->data['search_result'] = $this->search_model->search($this->input->get('q_search'));
}
$this->load->view('templates/header', $this->data);
$this->load->view('search', $this->data);
$this->load->view('templates/footer');
}
}
и все работает но что делать если у меня три таблицы а не однa movie как указано в модели и в видео?
ищу фильмы на сайте все работает а ищу сериал или мультик не ищет так как в модели только одна таблица указана movie а уменя их 3: movie,serial,animation
как сделать так чтобы искал вовсех трех таблицах???