[英]MySQL Query for Advanced Search multiple criteria
I'm working through an advanced search query where users select checkboxes based on multiple criteria. 我正在研究高级搜索查询,其中用户根据多个条件选择复选框。 I'm a beginner so I'm hoping I can find out if I'm on the right track.
我是一个初学者,所以我希望我能找到正确的方向。 I'm aware the query is quite the mess.
我知道查询是一团糟。
Edit: I realized this needed to be two questions, so I've revised to be strictly a query question 编辑:我意识到这需要两个问题,所以我已经修改为严格的查询问题
Table data 表数据
Table ss_users
user_id first_name last_name admin_level user_approved
1 nick jones 0 1
2 johnny rocket 0 1
Table ss_user_profile_status
user_id photo_uploaded
1 1
2 1
Table ss_user_photos
photo_id user_id filename selected
1 1 photo_1.jpg 1
2 2 photo_2.jpg 0
3 2 photo_2.jpg 1
Table ss_general
user_id city state zip neighborhood
1 baltimore maryland 00125 hamsterdam
2 lakeland maine 11542 treemont
Table ss_languages
user_id french german italian spanish
1 0 1 0 1
2 0 0 1 1
Table ss_experience
user_id waldorf kumon homeschooling
1 0 1 0
2 0 0 1
My current results are all users, which should not be the case: 我当前的结果是所有用户,情况并非如此:
SELECT
ss_users.*, ss_user_profile_status.*, ss_user_photos.*, ss_general.*,
ss_languages.*, ss_experience.*, ss_users.user_id AS userID,
ss_user_profile_status.user_id, ss_languages.user_id AS langID
FROM
ss_users
JOIN
ss_user_profile_status ON ss_users.user_id = ss_user_profile_status.user_id
LEFT JOIN
ss_user_photos ON ss_users.user_id = ss_user_photos.user_id
AND
ss_user_photos.selected = 1
LEFT JOIN
ss_languages ON ss_users.user_id = ss_languages.user_id
LEFT JOIN
ss_general ON ss_users.user_id = ss_general.user_id
LEFT JOIN
ss_experience ON ss_users.user_id = ss_experience.user_id
WHERE
ss_users.user_id = ss_user_profile_status.user_id
AND
ss_general.neighborhood_select LIKE '%hamsterdam%'
OR
ss_languages.spanish = 1
OR
ss_experience.kumon = 1
AND
ss_users.sitter_approved = 1
AND
ss_users.admin_level = 0
GROUP BY
ss_users.user_id DESC
For the output I need to represent much of the users profile, that's why I'm selecting a lot of table data, as well as the extra joins. 对于输出,我需要代表大部分用户个人资料,这就是为什么我要选择很多表数据以及额外的联接的原因。
For your big fat SQL selection 对于您的胖SQL选择
SELECT
ss_users.*, ss_user_profile_status.*, ss_user_photos.*, ss_general.*,
ss_languages.*, ss_experience.*, ss_users.user_id AS userID,
ss_user_profile_status.user_id, ss_languages.user_id AS langID
FROM ss_users
JOIN ss_user_profile_status ON ss_users.user_id = ss_user_profile_status.user_id
LEFT JOIN ss_user_photos ON ss_users.user_id = ss_user_photos.user_id AND ss_user_photos.selected = 1
LEFT JOIN ss_languages ON ss_users.user_id = ss_languages.user_id
LEFT JOIN ss_general ON ss_users.user_id = ss_general.user_id
LEFT JOIN ss_experience ON ss_users.user_id = ss_experience.user_id
WHERE
( ss_general.neighborhood_select LIKE '%hamsterdam%' OR ss_languages.spanish = 1 OR ss_experience.kumon = 1 ) AND ss_users.sitter_approved = 1 AND ss_users.admin_level = 0
I only edit few places like adding bracket around the OR and remove the first condition cause it seems redundant, and also remove the group by since it will left some data out 我只编辑一些地方,例如在OR周围添加方括号,并删除第一个条件(因为它似乎是多余的),并删除组,因为它会遗漏一些数据
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.