Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用于高级搜索多条件的MySQL查询_Php_Mysql_Search - Fatal编程技术网

Php 用于高级搜索多条件的MySQL查询

Php 用于高级搜索多条件的MySQL查询,php,mysql,search,Php,Mysql,Search,我正在处理一个高级搜索查询,用户根据多个条件选择复选框。我是一个初学者,所以我希望我能发现我是否在正确的轨道上。我知道这个问题相当混乱 编辑:我意识到这需要两个问题,所以我已经修改为严格的查询问题 表数据 Table ss_users user_id first_name last_name admin_level user_approved 1 nick jones 0 1 2 joh

我正在处理一个高级搜索查询,用户根据多个条件选择复选框。我是一个初学者,所以我希望我能发现我是否在正确的轨道上。我知道这个问题相当混乱

编辑:我意识到这需要两个问题,所以我已经修改为严格的查询问题

表数据

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周围添加括号,删除第一个条件,因为它看起来是多余的,而且还删除了group by,因为它会留下一些数据

为什么要定义两次$location_数据?如果不知道表结构和所需的输出应该是什么,这将很难回答。你有没有考虑过建立一个团队?谢谢@Ray。在这里编辑时出错了。@JayBlanchard当然,我将用一些表数据更新。感谢您的源代码易受SQL注入攻击。不要将用户输入连接到SQL查询中(即,
$location=$\u POST['location'];$location\u data=“和ss_general.neighbour,如“%”。内爆(“,$location)。“%”
谢谢李!这让我得到了我的结果。这是最好的方法吗?我肯定我可以做一些改进,不是吗?我想这取决于你需要其他表的信息的频率,如果我经常设计一个大表而不是几个小表的话。