簡體   English   中英

MySQL查詢高級搜索的多個條件

[英]MySQL Query for Advanced Search multiple criteria

我正在研究高級搜索查詢,其中用戶根據多個條件選擇復選框。 我是一個初學者,所以我希望我能找到正確的方向。 我知道查詢是一團糟。

編輯:我意識到這需要兩個問題,所以我已經修改為嚴格的查詢問題

表數據

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

我當前的結果是所有用戶,情況並非如此:

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

對於輸出,我需要代表大部分用戶個人資料,這就是為什么我要選擇很多表數據以及額外的聯接的原因。

對於您的胖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

我只編輯一些地方,例如在OR周圍添加方括號,並刪除第一個條件(因為它似乎是多余的),並刪除組,因為它會遺漏一些數據

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM