我的数据库中有2个表:
users('user_id', 'name', 'surname', 'email')
和表:
profile('profile_id', 'country')
在我的php脚本中有一个搜索框,用户在其中插入名称,搜索脚本会尝试从我的数据库中选择来自USA的所有名称。知道怎么写sql语句。这就是我所做的,但不起作用。
$sql = " SELECT u.name,u.surname, u.email,u.user_id,p.profile_id FROM users u
LEFT JOIN profile p ON p.country = 'uk'
WHERE ((u.surname LIKE '$name%' AND u.name LIKE '$surname%') OR
(u.surname LIKE '$surname%' AND u.name LIKE '$name%')) AND country IS NOT NULL";
我在国家/地区使用了IS NOT NULL,因为有些用户可能没有在他们的个人资料页面中显示他们的国家/地区。
答案 0 :(得分:1)
除非我遗漏了什么,否则这会有效:
$sql = " SELECT u.name,
u.surname,
u.email,
u.user_id,
p.profile_id
FROM users u
INNER JOIN profile p ON p.country = 'usa'
WHERE ((u.surname LIKE '$name%' AND u.name LIKE '$surname%') OR
(u.surname LIKE '$surname%' AND u.name LIKE '$name%'))
INNER JOIN
无需IS NOT NULL
条件和 country
现已设置为从usa
查找用户而不是uk
。
基于@Sina的观察,这个查询从一开始就很奇怪。 users
和profile
有何关联?如果profile_id
是user_id
,那么请使联接正常运行 - 如下所示:
INNER JOIN profile p ON p.profile_id = u.user_id AND p.country = 'usa'
答案 1 :(得分:1)
此查询会为所有用户提供国家/地区“uk”的个人资料,因为这是您的加入条件。
如果同一用户的user_id和profile_id相同(例如,如果profile_id = 4的国家/地区为'dk',那么user_id = 4的用户将居住在丹麦),那么您应加入以下内容:
SELECT ...
FROM users u JOIN profile p ON u.user_id = p.profile_id
WHERE ...
如果不是这种情况,那么您不一定要使用JOIN
,而只需将其写为where where条件,并将FROM
子句中的笛卡尔积作为:
SELECT ...
FROM users u, profile p
WHERE p.country = 'usa'
将联接视为基于共享属性将两个表放在一起的东西。在后一种情况下,没有共享财产。