Я не могу написать правильный запрос SQL правильно - PullRequest
0 голосов
/ 16 июня 2019

У меня есть 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 голосов
/ 16 июня 2019

Если вы хотите получить только пользователей с такими же критериями, как у вас, этот запрос должен работать

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'
0 голосов
/ 16 июня 2019

Предоставление ожидаемых результатов по сравнению с тем, что вы получаете, поможет найти лучшее решение. Здесь я пытаюсь написать запрос, основываясь на понимании того, что вы пытались написать в своем коде:

;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> ;
...