Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как составить подобный запрос 
:(
    Опции темы
Areostar
Дата 7.1.2015, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1191
Регистрация: 5.4.2008

Репутация: нет
Всего: -2



Есть тавлица содежащая посты(обьявления). Схема:

id, id_user, id_rublic, id_category, text

Таблица стран. Схема

id, name_country, iso

И таблица привязки выбранных стран к постую Схема:

id, id_post, id_country

Как произвести выборку постов по категориям и рубликая и понимаю. Но хотелось бы дать возможность поиска и по странам.

проблема в том что пользователь может выбрать несколько стран в условиях поиска и у конкретного поста может иметься несколько прикреплённых к нему стран

Как мне организовать поиск и по категориям и по странам и желательно в одном запросе?
PM MAIL   Вверх
ТоляМБА
Дата 7.1.2015, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 10
Всего: 252



Цитата(Areostar @  7.1.2015,  11:55 Найти цитируемый пост)
Есть тавлица содежащая посты
TPost
Цитата(Areostar @  7.1.2015,  11:55 Найти цитируемый пост)
Таблица стран
TCountry
Цитата(Areostar @  7.1.2015,  11:55 Найти цитируемый пост)
И таблица привязки выбранных стран к посту
TPostCountry

Поиск по одной стране:
Код
Select p.`text`
from tpost p
inner join tpostcountry pc
on p.id=pc.id_post
inner join tcountry c
on c.id=pc.id_country
where c.name_country='Россия'


Поиск по нескольким странам:
Код
Select p.`text`
from tpost p
inner join tpostcountry pc
on p.id=pc.id_post
inner join tcountry c
on c.id=pc.id_country
where c.name_country in ('Россия','Украина')


Цитата(Areostar @  7.1.2015,  11:55 Найти цитируемый пост)
Как мне организовать поиск и по категориям и по странам и желательно в одном запросе? 
Как у тебя организован поиск по категориям мне не ведомо.

PM   Вверх
Areostar
Дата 7.1.2015, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1191
Регистрация: 5.4.2008

Репутация: нет
Всего: -2



Код

$stmt = $dbh->prepare("SELECT `category_name`, `n_order` FROM category_table WHERE `type` = :type ORDER BY `n_order`"); $stmt->bindValue(':type', $this->_type, PDO::PARAM_INT);             if ($stmt->execute()) {


Запрос дл поиска без учёта страны у меня выглядит так:


PM MAIL   Вверх
ТоляМБА
Дата 8.1.2015, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 10
Всего: 252



Код
Select p.`text`, ct.`category_name`, ct.`n_order`
from tpost p
inner join tpostcountry pc
on p.id=pc.id_post
inner join tcountry c
on c.id=pc.id_country
inner join category_table ct
on p.id_category=ct.id
where c.name_country in ('Россия','Украина')
and ct.type in ('a','b','d')
order by ct.`n_order`

PM   Вверх
Areostar
Дата 8.1.2015, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1191
Регистрация: 5.4.2008

Репутация: нет
Всего: -2



Что значит p и ct ?

Или это просто рбозначение таблиц?
PM MAIL   Вверх
ТоляМБА
Дата 8.1.2015, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 10
Всего: 252



Areostar, это псевдонимы таблиц.

p - псевдоним таблицы tpost, задаётся в строке 2:
Код
from tpost p


ct - псевдоним таблицы category_table, задаётся в строке 7:
Код
inner join category_table ct


Без использования псевдонимов последний запрос выглядел бы так:

Код
Select tpost.`text`, category_table.`category_name`, category_table.`n_order`
from tpost
inner join tpostcountry
on tpost.id=tpostcountry.id_post
inner join tcountry
on tcountry.id=tpostcountry.id_country
inner join category_table
on tpost.id_category=category_table.id
where tcountry.name_country in ('Россия','Украина')
and category_table.type in ('a','b','d')
order by category_table.`n_order`

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0458 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.