php
  • mysql
  • 2017-10-18 28 views 0 likes 
    0

    私の質問を読んでくれてありがとう。私は1日半の間これに行ってきましたが、これはうまくいくようです。私がしようとしているのは、2つのSQLクエリを結合することです。2つのSQLクエリを組み合わせるPHP

    データベースへの接続が正しくセットアップされます。これはすべて動作しています。だから私は結合しようとしているクエリは、次のとおりです。

    $sql = "SELECT * FROM pf_posts WHERE post_type = 'cases' "; 
    $result = $conn->query($sql); 
    foreach ($result as $row) { 
         // do my stuff 
        } 
    $conn->close(); 
    

    $sql = "SELECT * FROM pf_postmeta WHERE meta_key = '_wp_attached_file' "; 
    $result = $conn->query($sql); 
    foreach ($result as $row) { 
         // do my stuff 
        } 
    $conn->close(); 
    

    そして

    は今、私は約 JOINUNIONを読んだが、私は2つのクエリが一緒に動作させることはできません。

    私は無駄にUNION ALLを使用して試してみました。

    $sql = "SELECT *FROM pf_postmeta WHERE meta_key = '_wp_attached_file' 
         UNION ALL 
         SELECT *FROM pf_posts WHERE post_type = 'cases'"; 
    $result = $conn->query($sql); 
    foreach ($result as $row) { 
         // do stuff 
        } 
    $conn->close(); 
    

    これは何も表示されません。

    私がUNION ALL SELECT部分を削除した場合、私のクエリが機能します。私はMySQLWorkbenchでこのコードを実行する場合、それは

    09:07:30 SELECT * FROM deb100651n2_pf.pf_posts WHERE post_type='cases' UNION ALL SELECT * FROM deb100651n2_pf.pf_postmeta WHERE meta_key = '_wp_attached_file' Error Code: 1222. The used SELECT statements have a different number of columns 0.050 sec

    のを言う私に、フォームのソリューションを持っている人はいますか?お時間を

    再度のおかげで:これは(私は、全体のSQLの事にはかなり新しいですので、優しくしてください...注意してください)...過去1,5日のために

    私を盗聴されています...

    +0

    UNIONクエリでどのようなエラーが発生しているかを確認するために、エラー出力を確認しましたか?それは始めるのに適しているだろう。 –

    +0

    デバッグの「出力」を取得する方法を教えてください。私は質問を更新して喜んでされます。 –

    +0

    PHPでこれらを実行するのではなく、MySQL WorkbenchまたはPHPMyAdminで実行する方がよい場合があります。エラーがあるかどうかを確認できます。あなたのスキーマを見ることなく、あなたを助けてくれることはありません。 JOINは2つのテーブルの間に関係がある場合にのみ動作します – Alex

    答えて

    3

    列の数が一致しなければならない「ユニオンクエリ」を実行するには:プラスを、各列のデータ型は最初のクエリの例(互換コラム3でなければならない小数、および列です3番目のクエリの3は整数です)。列数が異なるか、またはいずれかの列の型が互換性がない場合は、SQLエラーが発生します。

    So. のいずれかの生産コードでselect *を使用することを中止する理由は非常にあります。両方の選択リストに同じ数の列があり、それらの列に互換性があることを確認して、列名を指定する必要があります。

    +0

    あなたの質問は今解決されましたか?あなたはまだこの答えについて質問がありますか? [help/accepting](https://stackoverflow.com/help/someone-answers)の詳細については、「[** Click The Tick **](https://ibb.co/ikqyO6)」を受け入れるには –

    -4

    なぜそれを簡単に複雑にします。試してみてください:

    SELECT * FROM pf_postmeta 
    WHERE meta_key = '_wp_attached_file' 
    UNION 
    SELECT * FROM pf_posts 
    WHERE post_type = 'cases' 
    
    +0

    UNIONはこれを解決しません。 UNION ALLは完全に有効です。良くないことは 'select *'を使うことです。そのため、列の数が異なるのです。上の選択には!=下の選択までの列があります。 (NB:UNION ALLは途中で速くなります) –

    1

    上記の説明からわかるように、私はあなたのユニオンクエリーに列ミスマッチの問題があるかもしれません。union演算子を使用している間、あなたは3はTHINGS-

    • UNION内の各SELECT文が
    • 列は、各SELECT文で同様のデータ型
    • の列を持っている必要があります同じ数の列を持っている必要があります覚えておく必要があります必要がありますまた、あなたはpf_postmetapf_postテーブル、両方のテーブルの上に必須の時間をSELECT * ..操作を実行した場合と同じ順序
    • したがって

    になります同様のデータ型と順序付けを持つ同じ数の列。両方のテーブルにidというカラムがあると仮定して、どのようにユニオンが動作するかというコンセプトをクリアするためにSELECT id from pf_postmeta UNION ALL SELECT id from pf_postを試してみてください。

    +0

    これは論理的です。 IDが同じでない場合でもこれは動作しますか? 'fp_postmeta'は' meta_id'を持ち、 'fp_posts'は' ID'を持っています。行の名前と一致する必要がありますか? –

    +0

    はい。 'union'は結合テーブルからすべての行を取り出します。代数的な2つの組の「組合」のように考える。 'a = {1,2}'を設定し、 'b = {5,6}'を設定すると、 'a union b = {1,2,5,6}'となります。 列の名前は、両方が同じデータ型である限り同じであってはなりません。詳細については、このリンクを参照してください - https://www.w3schools.com/sql/sql_union.asp 希望に役立ちます。 –

    +0

    もし一致しなければ 'union'を使ってください。さて、私が考えている抽選会に戻ってください。そして、他のやり方でやってください... –

    関連する問題