Поиск SQL-вопроса между двумя связанными таблицами - PullRequest
2 голосов
/ 09 июня 2010

Я пишу поисковую систему для моего веб-приложения, и у меня возникла проблема. У меня есть 2 таблицы в первую очередь это таблица проектов:

ТАБЛИЦА ПРОЕКТОВ

id                  int(11)         NO      PRI     NULL    auto_increment
employer_id         int(11)         NO      MUL     NULL     
project_title       varchar(100)    NO      MUL     NULL     
project_description text            NO              NULL     
project_budget      int(11)         NO              NULL     
project_allowedtime int(11)         NO              NULL     
project_deadline    datetime        NO              NULL     
total_bids          int(11)         NO              NULL     
average_bid         int(11)         NO              NULL     
created             datetime        NO      MUL     NULL     
active              tinyint(1)      NO      MUL     NULL     

ТАБЛИЦА PROJECTS_SKILLS

project_id          int(11)         NO      MUL     NULL     
skill_id            int(11)         NO      MUL     NULL     

Например: я хочу задать этот запрос к базе данных:

1-) Skills are 5 and 7.
2-) Order results by created
3-) project title contains "php" word.
4-) Returned rows should contain projects.* columuns.
5-) Projects should be distinct(i don't want same projects in return of query).

Пожалуйста, напишите sql запрос, чтобы обеспечить эти условия. Спасибо.

Ответы [ 2 ]

3 голосов
/ 09 июня 2010
SELECT projects.*
FROM projects
WHERE EXISTS (
        SELECT *
        FROM projects_skills
        WHERE skill_id = 5 
            AND project_id = projects.project_id
    )
    AND EXISTS (
        SELECT *
        FROM projects_skills
        WHERE skill_id = 7
            AND project_id = projects.project_id
    )
    AND project_title LIKE '%php%'
ORDER BY created

или

SELECT projects.*
FROM projects
WHERE EXISTS (
        SELECT *
        FROM projects_skills
        WHERE skill_id IN (5, 7) 
            AND project_id = projects.project_id
    )
    AND project_title LIKE '%php%'
ORDER BY created

В зависимости от того, какой у вас намеченный результат.

3 голосов
/ 09 июня 2010

Звучит так, будто вы ищете запрос EXISTS, который проверяет наличие соответствующих строк в таблице, но без выполнения JOIN.

SELECT *
FROM projects
WHERE EXISTS (SELECT 1 FROM projects_skills AS ps WHERE ps.project_id = projects.project_id AND ps.skill_id IN (5, 7))
    AND project_title LIKE '%php%'
ORDER BY created;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...