У меня есть таблица, называют «имение», и четыре сводных таблиц для некоторых характеристик, как список удобств, intallations и т.д.Добавить столбец в виде MySQL из сводной таблицы (работа с Laravel 5)
Когда Я хочу сделать поиск (у объектов есть около 200 полей и пять мультиселектов). Я использую представление, называемое «westates», чтобы ускорить поиск. Но когда мне нужно искать другие характеристики, я использую четыре foreach (PHP), и я пересекаю все результаты и сравниваю их с сводной таблицей: - $ модели - результат первого запроса.
$extras = $request->ms_extras_amenities; //Items selected in multiselect
$others = $request->ms_more_features;
$facilities = $request->ms_other_installations;
$lapse = $request->lapse;
$models = $models->filter(function($model) use ($lapse,$extras,$others,$facilities)
{
$haslapse = false;
if(count($lapse)){
foreach($lapse as $item){
$result = \DB::table('rent_period_estates')
->whereRaw("estates_id = $model->id AND rent_period_id = $item")
->count();
if($result != 0) $haslapse = true;
}
}
else
$haslapse = true;
$hasextras = true;
if(count($extras)){
foreach($extras as $extra){
$result = \DB::table('extras_amenities_estates')
->whereRaw("estates_id = $model->id AND extras_id = $extra")
->count();
if($result == 0) $hasextras = false;
}
}
$hasothers = true;
if(count($others)) {
foreach ($others as $other) {
$result = \DB::table('other_chara_estates')
->whereRaw("estates_id = $model->id AND other_chara_id = $other")
->count();
if ($result == 0) $hasothers = false;
}
}
$hasfacilities = true;
if(count($facilities)) {
foreach ($facilities as $facility) {
$result = \DB::table('other_facilities_estates')
->whereRaw("estates_id = $model->id AND other_facilities_id = $facility")
->count();
if ($result == 0) $hasfacilities = false;
}
}
//Estate have to have all items selected in the multiselectd fields
if ($hasothers && $hasextras && $hasfacilities && $haslapse){
return $model;
}
});
Теперь у меня есть правильные результаты, но тестирование с 7 состояниями я бы сделал около 300 запросов.
Я хочу знать, как я могу создать представление, в том числе для того, чтобы запятые разделили запятыми как текст (это идея), например, получить результаты в массиве, привести его в порядок ([2,1,8,4 ] до «1,2,4,8») в поле, на мой взгляд, поэтому, когда я делаю запрос, я могу сделать только один запрос: ... И (westates.others = $ model-> others AND westates .extras = $ model-> extras AND ...)
Может быть, процедура может быть выполнена на сервере MySQL, но на самом деле я не могу найти решение.
Вот вид:
"CREATE OR REPLACE VIEW westates AS
SELECT
concat(estates.locale,estates.id) as code,
cities.name as city,
councils.name as council,
states.name as state,
countries.name as country,
concat(cities.name,' (',councils.name,')') as city_council,
estates.*
FROM estates
JOIN countries ON (estates.country_id = countries.id)
JOIN states ON (estates.state_id = states.id)
JOIN councils ON (estates.city_council_id = councils.id)
JOIN cities ON (estates.city_id = cities.id)"