このトピックでヘルプが見つかりました:MySQLのさまざまなテーブルでさまざまな列名を検索しましたが、それらはそのトピックのテーブルごとに2つのフィールドしか参照しておらず、検索から回答を生成できませんでした。
編集:私もこのスレッドを見つけました:もう少し役立つ情報を提供する共通のフィールドを持たない2つのテーブルを結合しますが、これらを適切に組み合わせる方法をまだ理解できません
JOIN
またはクエリを作成する必要がなかったUNION
ので、これはすべて私にとってかなり新しいことです。ですから、これに対する簡単な解決策があれば、私を許してください。
完全に異なるフィールドを持つ2つの異なるデータベーステーブルを検索するクエリを実行する必要があります。
これが私が1つに結合しようとしている2つのクエリです:
"SELECT * FROM seekers
WHERE (first_name LIKE '%".$q."%')
OR (last_name LIKE '%".$q."%')
OR (username LIKE '%".$q."%')
OR (school LIKE '%".$q."%')
OR (major LIKE '%".$q."%')
OR (employer LIKE '%".$q."%')
OR (position LIKE '%".$q."%')
OR (background LIKE '%".$q."%')
OR (interests LIKE '%".$q."%')
OR (skills LIKE '%".$q."%')
ORDER BY id DESC"
"SELECT * FROM companies
WHERE (company_name LIKE '%".$q."%')
OR (username LIKE '%".$q."%')
OR (industry LIKE '%".$q."%')
OR (slogan LIKE '%".$q."%')
OR (location LIKE '%".$q."%')
ORDER BY id"
クエリの後、すべてのフィールドを配列に入れ、それに応じてデータを表示したいと思います。
私がこれに関して抱えている主な問題は、テーブルをどのように組み合わせるかを決めることだと思いますか?JOIN
(内側または外側)を使用しますか、それとも使用しますUNION
か?
これを実行してを作成しようとしましたVIEW
が$this->mysqli->query("CREATE VIEW userTable AS (SELECT * FROM seekers) UNION ALL (SELECT * FROM companies)");
、テーブルのフィールドが大きく異なるため、うまくいきませんでした。
編集:以下の答えのいくつかを試した後、私はこのクエリを思いついた:
SELECT first_name, last_name, username, school, major, employer, position, background, interests, skills
FROM seekers
WHERE (first_name LIKE '%".$q."%')
OR (last_name LIKE '%".$q."%')
OR (username LIKE '%".$q."%')
OR (school LIKE '%".$q."%')
OR (major LIKE '%".$q."%')
OR (employer LIKE '%".$q."%')
OR (position LIKE '%".$q."%')
OR (background LIKE '%".$q."%')
OR (interests LIKE '%".$q."%')
OR (skills LIKE '%".$q."%')
UNION ALL
SELECT company_name, username, industry, slogan, location, NULL, NULL, NULL, NULL, NULL
WHERE (company_name LIKE '%".$q."%')
OR (username LIKE '%".$q."%')
OR (industry LIKE '%".$q."%')
OR (slogan LIKE '%".$q."%')
OR (location LIKE '%".$q."%')
ORDER BY
「UNIONとORDERBYの誤った使用」というエラーが発生したため、この句を削除しました。削除するORDER BY
と、次のエラーが発生します。「クエリに失敗しました:SQL構文にエラーがあります。対応するマニュアルを確認してください。 'WHERE(company_name LIKE'%0%')OR(username LIKE'%0%')OR(industry LIKE'%0%')'の近くで使用する正しい構文のMySQLサーバーバージョン
$q
結合後のクエリで0になるのはなぜですか?
編集#2:JOIN
これは、実際にデータを返すが、正しいデータを返さない、私がまとめたクエリです。これが質問に答えるのに役立つかどうかはわかりませんが、とにかくここに置くと思いました。
"SELECT * FROM seekers t1 LEFT JOIN companies t2 ON t1.id = t2.id WHERE (t1.first_name LIKE '%".$q."%') OR (t1.last_name LIKE '%".$q."%') OR (t1.username LIKE '%".$q."%') OR (t1.school LIKE '%".$q."%') OR (t1.major LIKE '%".$q."%') OR (t1.employer LIKE '%".$q."%') OR (t1.position LIKE '%".$q."%') OR (t1.background LIKE '%".$q."%') OR (t1.interests LIKE '%".$q."%') OR (t1.skills LIKE '%".$q."%') OR (t2.company_name LIKE '%".$q."%') OR (t2.username LIKE '%".$q."%') OR (t2.industry LIKE '%".$q."%') OR (t2.slogan LIKE '%".$q."%') OR (t2.location LIKE '%".$q."%')"
最後のクエリのフォーマットについて申し訳ありませんが、貼り付け時に混乱しました。