0

このようなクエリを使用して検索機能を作成しています

SELECT personal_info.PersonalID, personal_info.FullName FROM personal_info

INNER JOIN skillset ON personal_info.PersonalID = skillset.PersonalID
INNER JOIN language ON personal_info.PersonalID = language.PersonalID

WHERE personal_info.FullName LIKE '%%'
AND skillset.SkillName REGEXP 'pl|google'
AND language.Language REGEXP 'ita|vol'

HAVING COUNT(*)

このクエリは期待どおりの結果を返しますが、確認するために変更すると、

再びに変更しskillset.Skillname REGEXP 'pl|google'skillset.Skillname REGEXP 'pl|adafrtesd'

何も返さないと思ったときに同じ値を返します。誰でも助けてくれますか? 私はまだMySQLを学んでいます。:D

私のテーブル構造:

スキルセット
PersonalID | スキル名 130105
| PL
130105 | グーグル

言語
PersonalID | 言語
130105 | イタリア
130105 | ヴォラプク

4

1 に答える 1

1

集計を行わないと、1 つのクエリで同じテーブルの 2 つの行を比較することはできません。MySQL からすべての有効な可能な行を選択し、PHP を使用してデータをループすることをお勧めします。これは、状態 (たとえば、誰がどのスキルを持っているか) を維持し、最終結果を要求と照合できるためです。

MySQLでは、潜在的にそれを行うことができますGROUP_CONCAT

SELECT personal_info.PersonalID, personal_info.FullName,
    GROUP_CONCAT(Language ORDER BY Language) AS languages,
    GROUP_CONCAT(SkillName ORDER BY SkillName) AS skills
FROM personal_info
JOIN skillset ON personal_info.PersonalID = skillset.PersonalID
JOIN language ON personal_info.PersonalID = language.PersonalID
AND skillset.SkillName REGEXP 'pl|google'
AND language.Language REGEXP 'ita|vol'
GROUP BY PersonalID
HAVING
    skills LIKE '%pl%' AND skills LIKE '%google%'
于 2013-02-21T14:35:19.940 に答える