Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

sitinj's avatar

Dynamic Query

hi, i have this query

SET @sql = NULL;
SELECT 
  GROUP_CONCAT(DISTINCT
    CONCAT(
       'max(case when tahun = ''',
      tahun,
      ''' then target end) tahun'
    ) 
  ) 
  INTO @sql
FROM
  renstra_indikator;
SET @sql = CONCAT('SELECT b.start_periode,b.end_periode,d.desc_renstra tujuan, e.desc_renstra sasaran,c.desc_renstra indikator, f.desc_satuan satuan, ', 
                          @sql, ' 
                     FROM renstra_periode b
                          left join m_renstra d on b.id_tujuan = d.id_renstra 
                          left join m_renstra e on b.id_sasaran = e.id_renstra 
                          left join renstra_indikator a on a.id_seq_periode = b.id_seq
                          left join m_renstra c on a.id_indikator = c.id_renstra
                          left join m_satuan f on c.id_satuan = f.id_satuan');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

and i want to put this query in controller, then become like this

$renstra = DB::select("SET @sql = NULL;
        SELECT
          GROUP_CONCAT(DISTINCT
            CONCAT(
               'max(case when tahun = ''',
              tahun,
              ''' then target end) tahun'
            ) 
          ) 
          INTO @sql
        FROM
          renstra_indikator;
        SET @sql = CONCAT('SELECT b.start_periode,b.end_periode,d.desc_renstra tujuan, e.desc_renstra sasaran,c.desc_renstra indikator, f.desc_satuan satuan, ', 
                                  @sql, ' 
                             FROM renstra_periode b
                                  left join m_renstra d on b.id_tujuan = d.id_renstra 
                                  left join m_renstra e on b.id_sasaran = e.id_renstra 
                                  left join renstra_indikator a on a.id_seq_periode = b.id_seq
                                  left join m_renstra c on a.id_indikator = c.id_renstra
                                  left join m_satuan f on c.id_satuan = f.id_satuan ');
        
        PREPARE stmt FROM @sql;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;");
        return response()->json($renstra);

and when i run then show up this error

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use

but when i run on mysql editor is not problem, and result show well. so what should i do...please help me to solve this. thanks before.

0 likes
3 replies
siangboon's avatar

didn't really look in to your query but you may try something like:

-->DB::raw( ... )

->select(DB::raw( ... ))

 ->selectRaw( ... )
sitinj's avatar

hi @siangboon thanks for reply.

i try then show this error

Error
Call to undefined function App\Http\Controllers\select() 

is there any need to import something ?

sitinj's avatar
sitinj
OP
Best Answer
Level 1

hi, i solved my problem with created procedure for my query then called with this

DB::select("call LapRenstra('".$periode."')")

thanks..

Please or to participate in this conversation.