我有两个表:users
和location
。 users
中的列为:id
,name
和location_id
。
location
中的列为id
和city
。
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 :(得分:1)
对于某个特定城市,您只需将users表加入位置表即可。
$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
。
答案 1 :(得分:0)
你的SQL查询应该看起来像这样:
SELECT * FROM users WHERE location_id IN (SELECT id FROM locations WHERE id='location_id_here')
对于此示例,您需要在执行此查询之前尝试查找的位置ID,但是如果您拥有该位置ID则应该有效。