简体   繁体   English

MySQL查询高级搜索的多个条件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM