Как искать в зависимости от местоположения в двух таблицах с отношением один ко многим?

0

У меня две таблицы: users и location. В столбцах users: id, name и location_id.

Столбцы в location - это id и city.

Между users.location_id двумя таблицами (от одного до многих) существует связь между users.location_id и location.id.

Я хочу показать пользователям, которые имеют одинаковое расположение.

Например:

 <input type='text' name='search_input' />

 $search_input = $_POST["search_input"];

 $stmt = $pdo->prepare('SELECT * from users WHERE ... LIKE  :s');
 $stmt->bindValue(':s',  '%' . $search_input . '%'  , PDO::PARAM_STR);
 $stmt->execute();
 $values = $stmt->fetchAll();

Я хочу заполнить инструкцию sql, чтобы выбрать пользователей, имеющих одно и то же местоположение.

  • 0
    Можете ли вы объяснить немного больше, что вы подразумеваете под "пользователями с одинаковым местоположением"? Может показать пример? Как связан поиск?
  • 0
    @Don'tPanic Don'tPanic, например, у меня есть два пользователя: Джек и Джон, оба имеют location_id = 1, например, например, Нью-Йорк. Я хочу показать обоих пользователей при вводе в Нью-Йорк.
Показать ещё 2 комментария
Теги:
pdo

2 ответа

1
Лучший ответ

Для одного конкретного города вы можете просто присоединиться к таблице пользователей в таблице местоположений.

$sql = 'SELECT *
        FROM users JOIN location ON users.location_id = location.id
        WHERE city = ?';

$stmt = $pdo->prepare($sql);
$stmt->execute([$search_input]);
$values = $stmt->fetchAll();

То, как вы делаете это сейчас, с LIKE, может возвращать более одного города, тем не менее, поэтому вы можете добавить некоторую сортировку в свой запрос для организации результатов.

$sql = 'SELECT *
        FROM users JOIN location ON users.location_id = location.id
        WHERE city LIKE ?
        ORDER BY city.name, users.name';
$stmt = $pdo->prepare($sql);
$stmt->execute(["%$search_input%"]);
$values = $stmt->fetchAll();

Если вы не хотите (возможно) сопоставлять более одного места, вы должны использовать = а не LIKE.

0

Вероятно, ваш SQL-запрос должен выглядеть примерно так:

SELECT * FROM users WHERE location_id IN (SELECT id FROM locations WHERE id='location_id_here')

В этом примере вам понадобится идентификатор местоположения, который вы пытаетесь найти, прежде чем выполнять этот запрос, но если у вас есть это, он должен работать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню