2012-03-16 5 views
-1

私はPDOを使用してdbリクエストを作成するのが初めてで、少し助けが必要です。 は、私は、次のデシベルの呼び出しがあります。ユニオンでPDOが動作しない

$stmt1 = $pdo->prepare(' 
    SELECT * FROM news WHERE pub_date >= ? AND pub_date < ? AND display = 1 ORDER BY pub_date DESC 
    UNION 
    SELECT * FROM vs_news WHERE pub_date >= ? AND pub_date < ? AND display = 1 ORDER BY pub_date DESC 
'); 
$stmt1->bindParam(1, $col_start); 
$stmt1->bindParam(2, $col_end); 
$stmt1->execute(); 

私はUNIONはPDOとcompatableだと思うのに十分な読んだことを、私は、コードの権利を取得するように見えることはできませんし、完全なコードフォーマットの例を見つけることができません。

両方のテーブルのフィールドは同じで、dbコールはどちらか一方のテーブルだけで動作しますが、私が示したUNIIONでは動作しません。

誰かが私の問題点を指摘してくれますか?

ありがとう

+2

に記述されているあなたも、もし二つがある4つのパラメータを結合しようとしましたダブ? – Cerad

+0

追加する必要があります:$ stmt1-> bindParam(3、$ col_start); $ stmt1-> bindParam(4、$ col_end); – user1028866

+1

'作業していません'。 –

答えて

3

?それぞれのパラメータを一致させる必要があることを意味しますか?

使用この種のアプローチ:また

$stmt1 = $pdo->prepare(' 
    SELECT * FROM news WHERE pub_date >= :date1 AND pub_date < :date2 AND display = 1 ORDER BY pub_date DESC 
    UNION 
    SELECT * FROM vs_news WHERE pub_date >= :date1 AND pub_date < :date2 AND display = 1 ORDER BY pub_date DESC 
'); 
$stmt1->bindParam(':date1', $col_start); 
$stmt1->bindParam(':date2', $col_end); 
$stmt1->execute(); 

。共用体では、両方の問合せで同じ数の列を使用するようにしてください。

3

ORDER BYUNIONの中に使用するには、コンポーネントを()に囲む必要があります。他の場所で提案されているようなコメントで提案されているようにすべての4つのパラメータを結合、または名前付きプレースホルダを使用することに加えて、次の操作を行います。

$stmt1 = $pdo->prepare(' 
    (SELECT * FROM news WHERE pub_date >= ? AND pub_date < ? AND display = 1 ORDER BY pub_date DESC) 
    UNION 
    (SELECT * FROM vs_news WHERE pub_date >= ? AND pub_date < ? AND display = 1 ORDER BY pub_date DESC) 
'); 

これはMySQL UNION syntax reference.

+0

マイケルさん、ありがとうございます。 – user1028866

+0

私はこれを読んでいる人を助けるかもしれない何かを見つけました。私は2つのORDER BYを削除し、2番目のSELECTの ")"の後に1回入れます。この結果、和集合の順序が決まりました。 – user1028866

関連する問題