2017-07-10 18 views
0

を働いていないことにより、選択したグループを挿入します。PDO + SQL誰かがこのPDOで私を助けることができる

  • アイデア:

、 '表1' に、テーブルから選択して取得した行を挿入TABLE1の0

  • 構造:

    id_i(int Primary AI)| id_e(int)|日付(datetime)| |合計(10進数14,2)| stat(tinyint)

ボーナス質問:1000以上の行の場合は、SQLリクエストを最適化するためのアイデアはありますか?

私のコード:

$query = " INSERT INTO table1 (id_e, date, string, sum, stat) 
    SELECT id_s, NOW(), GROUP_CONCAT(id_r), SUM(bud), 0 
    FROM table0 as e 
    WHERE e.stat=4 AND e.datetime<='$date' GROUP BY e.id_s 
    "; 

    try 
    { 
    $bdd = new PDO('xxxx'); 
    } 

    catch(Exception $e) 
    { 
    die('Erreur: '.$e->getMessage()); 
    } 
    $request= $bdd->prepare($query); 

    if ($bdd->execute()) { 
     echo 'ok'; 
    } 
    else { 
     echo 'no'; 
    } 

あなたは、私が 'いいえ' だ理解したよう!しかし、もし私がを選択した場合、が動作しています!

+1

エラーが発生していない場合、デバッグのエラー報告をオンにしてください( '$ bdd-> setAttribute(PDO :: ATTR_ERRMODE、PDO :: ERRMODE_EXCEPTION);'接続後) –

+0

ナイジェルに感謝します。助けて!!今問題は修正されています(列名の問題)! –

+0

答えとして追加されたので、将来の読者が解決策を見つけるのが簡単です。 –

答えて

0

このようなエラーをエンドユーザーが見るのはよくありません。

0

エラーメッセージは投稿できますか?

5.7でsqlmodeは、句のONLY_FULL_GROUP_BYを削除

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION. 

にデフォルトで設定されています。このように削除することができます:

SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); 

これを試してみてください。

+0

なぜあなたはその設定を削除しますか?この場合、クエリの一部でグループに存在しない値は定数(now()と0)です。 ONLY_FULL_GROUP_BYをオフにすると、0が実際に列であるクエリの方法が開きます。それは予期しない結果を招きます.0と1の両方が可能です。これらのうちの1つのみで終わるでしょう。これは、警告なしに不自由なクエリを実行することを可能にします –

-1

グループごとに欠落している列を追加:あなたがエラーを取得していない場合、これはあなたが何であるか、エラー見ることができるようになります

$bdd = new PDO('xxxx'); 
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION; 

をデバッグするためのエラー報告をオンに

INSERT INTO table1 (id_e, date, string, sum, stat) 
    SELECT id_s, NOW() as tm, GROUP_CONCAT(id_r), SUM(bud), 0 AS stat 
    FROM table0 as e 
    WHERE e.stat=4 AND e.datetime<='$date' 
    GROUP BY e.id_s, tm, stat 
関連する問題