sql >> データベース >  >> RDS >> Mysql

LaravelはMySQLクエリとは異なる出力を出力します

    私はなんとか問題を解決できましたが、LaravelORMを使用していませんでした。なぜそれがlaravelで機能しなかったのか、phpmysqli関数で機能したのかはよくわかりません。問題は、ORMメソッドを使用しているときにMySQL変数が初期化されないことだと思います。

    私はphpに組み込まれたmysqlメソッドを使用しましたが、すべてうまくいきました。

    解決策:

    $query = SELECT hodname, year, month, ptype, pcode, rname, sah, sae, sbe
    FROM
    (SELECT
    (CASE tblhod.hodname
    WHEN @curHOD THEN @curHODRow:[email protected]+1
    ELSE @curHODRow:=1
    END) AS seqhodname,
    @curHOD:=tblhod.hodname AS hodnamedata,
    (CASE WHEN @curHODRow=1 THEN tblhod.hodname
    ELSE ''
    END) AS hodname,
    (CASE tblhod.hodname
    WHEN @curHOD THEN CASE tblperiod.year
    WHEN @curYear THEN @curYearRow:[email protected]+1
    ELSE @curYearRow:=1
    END
    END) AS seqyear,
    @curYear:=tblperiod.year AS yeardata, 
    (CASE WHEN @curYearRow=1 THEN tblperiod.year
    ELSE ''
    END) AS year,
    (CASE tblhod.hodname
    WHEN @curHOD THEN CASE tblperiod.year
    WHEN @curYear THEN CASE tblperiod.month
    WHEN @curMonth THEN @curMonthRow:[email protected]+1
    ELSE @curMonthRow:=1
    END
    END
    END) AS seqmonth,
    @curMonth:=tblperiod.month AS monthdata,
    (CASE WHEN @curMonthRow=1 THEN tblperiod.month
    ELSE ''
    END) AS month,
    (CASE tblhod.hodname
    WHEN @curHOD THEN CASE tblperiod.year
    WHEN @curYear THEN CASE tblperiod.month
    WHEN @curMonth THEN CASE tblprotype.ptype
    WHEN @curPtype THEN @curPtypeRow:[email protected]+1
    ELSE @curPtypeRow:=1
    END
    END
    END
    END) AS seqptype,
    @curPtype:=tblprotype.ptype AS ptypedata,
    (CASE WHEN @curPtypeRow=1 THEN tblprotype.ptype
    ELSE ''
    END) AS ptype,
    (CASE tblhod.hodname
    WHEN @curHOD THEN CASE tblperiod.year
    WHEN @curYear THEN CASE tblperiod.month
    WHEN @curMonth THEN CASE tblprotype.ptype
    WHEN @curPtype THEN CASE tblproject.pcode
    WHEN @curPcode THEN @curPcodeRow:[email protected]+1
    ELSE @curPcodeRow:=1
    END
    END
    END
    END
    END) AS seqpcode,
    @curPcode:=tblproject.pcode AS pcodedata,
    (CASE WHEN @curPcodeRow=1 THEN tblproject.pcode
    ELSE ''
    END) AS pcode,
    tblresource.rname AS rname, SUM(ah) AS sah, SUM(ae) AS sae, SUM(be) AS sbe
    FROM `tblallocation`
    JOIN tblhod ON tblallocation.hodid = tblhod.hodid
    JOIN tblperiod ON tblallocation.periodid = tblperiod.periodid
    JOIN tblprotype ON tblallocation.ptid = tblprotype.ptid
    JOIN tblproject ON tblallocation.pid = tblproject.pid
    JOIN tblresource ON tblallocation.rid = tblresource.rid
    JOIN(SELECT @curHODRow:=0, @curHOD:=0,@curYearRow:=0, @curYear:=0, @curMonthRow:=0, @curMonth:=0, @curPtypeRow:=0, @curPtype:=0, @curPcodeRow:=0, @curPcode:=0) v
    GROUP BY tblhod.hodname, tblperiod.year, tblperiod.month, tblprotype.ptype, tblproject.pcode, tblresource.rname WITH ROLLUP) AS final;
    
    $con = mysqli_connect('host', 'username', 'password', 'database');
    $result = mysqli_query($con, $query);
    $data = mysqli_fetch_all($result);
    

    誰かが私にこのためのORMソリューションを教えてくれるなら素晴らしいでしょう!




    1. MYSQLとLIMIT句

    2. PHPでのSQLクエリと条件

    3. PHPで日付を変換中に間違った日付

    4. MySqlデータベースからの日付ブロックの配列が必要