2017-02-12 10 views
1

あなたが最後に親切に助けてくれたことは、私が次の課題を解決できることを願っています。テーブルが一致するPHP/SQLクエリ(ワイルドカード)

同じデータベースに2つのテーブルがあり、フィールドを照合しようとしています。ここで私はテーブル名で探しているクエリですが、私はそれを働かせることはできません:

私はMATCHテーブル "projects"とColumn "categorysecond"テーブル "users_profile"とColumn "category"にしたいです。

projects.category秒には例が含まれます。 "ルーフィング、Windows、造園" users_profile.categoryは "屋根葺き"または "Windows"または "造園"しかないので、users_profile.categoryの結果がプロジェクトの場合は "projects"から結果を取りたいと思っています。

***重要 - 私は、例IDで内部結合を行う一意の識別子を持っていません。 1つの単語(%Wildcard)が他の単語と一致する場合は、上記の表に唯一一致する必要があります。私の試み

$sql = "SELECT DISTINCT users_profiles.username, projects.id FROM users_profiles, projects WHERE users_profiles.category like '%' + projects.categorysecond + '%'"; 

OF

SAMPLEは、この理にかなっていますか? :)

ありがとうございます。

+1

質問を編集し、質問のサンプルデータと希望の結果*を表形式*で提供してください。第二に、物のリストをコンマで区切られた文字列として格納することは、本当に本当に本当に本当に悪い考えです。あなたはなぜカテゴリーの関係を表すのに悪い方法を選んだのか説明してください。 –

+0

上記の私の試行のサンプルを追加しました。ありがとうございました。 – SiREKT

答えて

1
select distinct 
     up.username 
     ,p.id 
from users_profiles as up 
     join projects as p 
     on  concat(',',p.categorysecond,',') like concat('%,',up.category,',%') 
+0

Dudu、あなたは天才です...これはうまくいきました。どうもありがとうございます!!! – SiREKT

+0

:-)大歓迎です。回答を受け入れることを忘れないでください。 –

+0

こんにちは@dudu! 私はより多くのテストをしたので少し問題があります。フィールドusers.profiles(カテゴリ)に屋根があり、フィールドプロジェクト(categorysecond)に屋根がある場合、別のカテゴリを入力してすぐに結果を引き出します(2番目のカテゴリを入力してルーフィング(例:ルーフィング;ペイント;ルーフィング。 私はGordon Linoffからの提案を受けて、word1、word2、word3のcategorysecondのすべてのエントリを改訂しました。 〜word1; word2; word3; また、Gordon Linoffが示唆したようにfind_in_set()を試みましたが、結果が得られませんでした。 ご意見はありますか? – SiREKT

0

本当に悪いデータフォーマットです。コンマ区切りのフィールドに物のリストを格納するべきではありません。このクエリで発生している問題は、この問題の一例に過ぎません。インデックスやその他の最適化テクニックを利用するようなクエリを取得することはできません。

時々、私たちは他の人の本当に悪い設計決定に悩まされています。

SELECT DISTINCT up.username, p.id 
FROM users_profiles up JOIN 
    projects p 
    ON find_in_set(up.category, p.categorysecond) > 0; 

注:MySQLは、この場合の著作を持つ関数find_in_set()を持っているあなたはDISTINCTを必要としない場合は、それが含まれていません。それは単にパフォーマンスのペナルティを招くだけです。

+0

こんにちはゴードン、私はまだいくつかの課題を抱えているようです。私はあなたの意見をいくつか取り上げましたが、上記の回答を見てください。 – SiREKT

関連する問題