我无法正确编写正确的SQL查询

时间:2019-06-16 09:08:14

标签: mysql sql database postgresql qsqlquery

我在数据库中有2个表,我正在尝试根据某些条件过滤某些用户。

criterias table

+---------+----------------------+--------------------+----------------------+
| user_id | searching_friendship | searching_practice | conversation_subject |
+---------+----------------------+--------------------+----------------------+
| 31      |                      |                    | science              |
| 26      |  on                  | on                 | love                 |
| 32      |  on                  | off                | science              |
| 34      |                      |                    |                      |
+---------+----------------------+--------------------+----------------------+


user table
+---------+------------+-----------------------------+---------------+-------------+---------------+--------------+------------------+
| user_id | user_name  | user_email                  | user_password | user_gender | user_language | language_lvl | last_login       |
+---------+------------+-----------------------------+---------------+-------------+---------------+--------------+------------------+
| 26      | Furkan     | furkanakgun@windowslive.com | 123           |             | Türkiye      | basic        | 16.06.2019 11:57 |
| 31      | sfsdf      | asdfasdf@hotmail.com        | 123           | Male        | Afrikaans     | basic        | 09.06.2019 20:01 |
| 32      | denemeuser | xxx@hotmail.com             | 123           | Male        | Amharic       | intermediate | 16.06.2019 11:57 |
| 33      | Smith      | ssdf                        | 123           | male        | ing           | upper        | NULL             |
| 34      | luser      | llll@hotmai.com             | 123456        | Male        | Afrikaans     | basic        | 16.06.2019 10:32 |
+---------+------------+-----------------------------+---------------+-------------+---------------+--------------+------------------+

我正在尝试匹配具有相同条件的用户。我要做的是

$userId=$_SESSION['userId'];
$sql="SELECT* FROM criterias WHERE user_id='$userId'";
$query=mysqli_query($conn,$sql);

while($result=mysqli_fetch_assoc($query)){
    $friendshipCheck=$result['searching_friendship'];
    $pracCheck=$result['searching_practice'];
    $conversationSub=$result['conversation_subject'];
}

所以我正在获取当前的标准信息,我正试图与其他这样的用户匹配

SELECT* FROM users,criterias WHERE (users.user_id=criterias.user_id AND users.user_id!='$userId') AND criterias.searching_friendship='$friendshipCheck' OR criterias.searching_practice='$pracCheck'

但是它不起作用。您知道如何解决这个亲爱的朋友吗?

2 个答案:

答案 0 :(得分:0)

提供预期结果与获得的结果将有助于证明最佳解决方案。 在这里,我尝试基于对您尝试在代码中编写的内容的理解来编写查询:

;WITH  CTE AS
    (
           SELECT  C.*
           FROM    Criterias C
           WHERE   C.user_id = <user_id_input>
    )
    SELECT  *
    FROM    User U
            INNER JOIN Criterias C
                ON U.user_id = C.user_id
    WHERE   EXISTS ( 
                       SELECT 1
                       FROM   CTE 
                       WHERE  CTE.searching_friendship = C.searching_friendship
                       OR     CTE.searching_practice   = C.searching_practice
                   )
     AND        U.user_id != <input_user_id> ;

答案 1 :(得分:0)

如果您只想获得与您的条件相同的用户,则此查询应该有效

SELECT *
FROM users AS u
INNER JOIN criterias AS c ON u.user_id = c.user_id
WHERE u.user_id != '$userId'
  AND c.searching_friendship = '$friendshipCheck'
  AND c.searching_practice = '$pracCheck'
  AND c.conversation_subject = '$conversation_subject'