1

このトピックでヘルプが見つかりました: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."%')"

最後のクエリのフォーマットについて申し訳ありませんが、貼り付け時に混乱しました。

4

2 に答える 2

2

UNIONを試すこともできますが、各列名にエイリアスを付けます。それらが同じ順序であることを確認してください。例として以下を参照してください。

SELECT first_name col1, last_name col2 etc etc 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
UNION
SELECT company_name col1, username col2, etc etc 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

これにより、同じ結果セットの列が一致します。つまり、first_nameとcompany_nameはcol1などに表示されます。

ノート

  1. UNIONでは、両方のクエリで同じ数の列を選択する必要があります。
  2. データ型を一致させる必要があります
  3. 列を偽造する必要がある場合は、nullを使用してください
于 2013-03-01T23:07:32.833 に答える
1

UNIONを使用している場合は、各SELECTのフィールド数が等しいことを確認する必要があります。したがって、上記の例では、「Select*」を使用しないでください。次のようにします。

t1.field1、t1.field2、t1.field3、t1.field4、t1.field5、t1.field6を選択し
ます

連合

t2.field1、t2.field2、t2.field3、t2.field4、''、''
From .....
Where.... を選択します。

各Selectのフィールド数が異なる場合は、空白のフィールドを追加して均等にします。

于 2013-03-01T23:04:38.240 に答える