Welcome Guest, Not a member yet? Register   Sign In
Db query return true if there aren't row
#1

hi , i have this query : 

Code:
                $sql ='


                WITH tratta_di_riferimento as(
                    SELECT
                      mezzi_tratte.id_tratte_libere
                    FROM
                      tratte_libere as tratte
                      JOIN tratte_libere_mezzi as mezzi_tratte ON tratte.id = mezzi_tratte.id_tratte_libere
                      JOIN mezzi ON mezzi_tratte.id_mezzi = mezzi.id
                    WHERE
                      TRUNCATE (
                        6363 * sqrt(
                          POW(
                            RADIANS("'.$latitudine_partenza.'") - RADIANS(tratte.latitudine_partenza),
                            2
                          ) + POW(
                            RADIANS("'.$longitudine_partenza.'") - RADIANS(tratte.longitudine_partenza),
                            2
                          )
                        ),
                        3
                      ) < (tratte.raggio_ricerca_km + "'.$opzioni->distanza_max_tratta.'")
                      AND TRUNCATE (
                        6363 * sqrt(
                          POW(
                            RADIANS("'.$latitudine_arrivo.'") - RADIANS(tratte.latitudine_arrivo),
                            2
                          ) + POW(
                            RADIANS("'.$longitudine_arrivo.'") - RADIANS(tratte.longitudine_arrivo),
                            2
                          )
                        ),
                        3
                      ) < (tratte.raggio_ricerca_km + "'.$opzioni->distanza_max_tratta.'")
                      AND mezzi.passeggeri >= "'.$passeggeri.'"
                      AND mezzi.bagagli >= "'.$bagagli.'"
                      AND mezzi.deleted_at IS NULL
                      AND mezzi_tratte.deleted_at IS NULL
                      AND tratte.deleted_at IS NULL
                    ORDER BY
                      mezzi_tratte.costo
                                LIMIT 1
                                ),/*end tratta di riferimento [PRENDE L\'ID DELLA TRATTA CON COSTO +BASSO]*/
                  result_row as(
                    SELECT
                      mezzi_tratte.id,
                      mezzi_tratte.id_tratte_libere,
                      mezzi_tratte.id_mezzi,
                      mezzi_tratte.costo as costo_tratta,
                      mezzi.id as id_tabella_mezzi,
                      mezzi.immagine,
                      mezzi.nome,
                      mezzi.descrizione as mezzi_descrizione,
                      mezzi.passeggeri,
                      mezzi.bagagli,                 
                      mezzi.costo_km_extra,
                      tratte.latitudine_partenza,
                      tratte.longitudine_partenza,
                      tratte.latitudine_arrivo,
                      tratte.longitudine_arrivo,
                      tratte.raggio_ricerca_km
                    FROM
                      tratte_libere as tratte
                        JOIN tratta_di_riferimento on tratte.id = tratta_di_riferimento.id_tratte_libere
                      JOIN tratte_libere_mezzi as mezzi_tratte ON tratte.id = mezzi_tratte.id_tratte_libere
                      JOIN mezzi ON mezzi_tratte.id_mezzi = mezzi.id
                    WHERE
                      TRUNCATE (
                        6363 * sqrt(
                          POW(
                            RADIANS("'.$latitudine_partenza.'") - RADIANS(tratte.latitudine_partenza),
                            2
                          ) + POW(
                            RADIANS("'.$longitudine_partenza.'") - RADIANS(tratte.longitudine_partenza),
                            2
                          )
                        ),
                        3
                      ) < (tratte.raggio_ricerca_km + "'.$opzioni->distanza_max_tratta.'")
                      AND TRUNCATE (
                        6363 * sqrt(
                          POW(
                            RADIANS("'.$latitudine_arrivo.'") - RADIANS(tratte.latitudine_arrivo),
                            2
                          ) + POW(
                            RADIANS("'.$longitudine_arrivo.'") - RADIANS(tratte.longitudine_arrivo),
                            2
                          )
                        ),
                        3
                      ) < (tratte.raggio_ricerca_km + "'.$opzioni->distanza_max_tratta.'")
                      AND mezzi.passeggeri >= "'.$passeggeri.'"
                      AND mezzi.bagagli >= "'.$bagagli.'"
                      AND mezzi.deleted_at IS NULL
                      AND mezzi_tratte.deleted_at IS NULL
                      AND tratte.deleted_at IS NULL
                    ORDER BY
                      mezzi_tratte.costo),/*END RESULT ROW*/
                        result_row2 as(
                        select result_row.*,
                        TRUNCATE (
                                            6363 * sqrt(
                                              POW(
                                                RADIANS("'.$latitudine_partenza.'") - RADIANS(latitudine_partenza),
                                                2
                                              ) + POW(
                                                RADIANS("'.$longitudine_partenza.'") - RADIANS(longitudine_partenza),
                                                2
                                              )
                                            ),
                                            3
                                          ) +
                                      TRUNCATE (
                                            6363 * sqrt(
                                              POW(
                                                RADIANS("'.$latitudine_arrivo.'") - RADIANS(latitudine_arrivo),
                                                2
                                              ) + POW(
                                                RADIANS("'.$longitudine_arrivo.'") - RADIANS(longitudine_arrivo),
                                                2
                                              )
                                            ),
                                            3
                                          )-raggio_ricerca_km as km_differenza_totale
                                         
                        from result_row)/*end result_row2*/
             
                    SELECT  *,km_differenza_totale*costo_km_extra +costo_tratta as costo from result_row2;
                    ';

                    log_message('debug',$sql);

                    $res=$db->query( $sql )->getResult();

if i insert $sql in phpmyadmin return 0 row, why it return  this error:

Call to a member function getResult() on true
Reply
#2

Seems like your query is falsely recognized as a write query. Feel free to report a bug... and ideally a PR Wink
Reply
#3

(02-16-2025, 11:43 AM)michalsn Wrote: Seems like your query is falsely recognized as a write query. Feel free to report a bug... and ideally a PR Wink

Change cte with temporary table , now working fine :

Code:
                $sql_drop_tratta_riferimento ='
                DROP TEMPORARY TABLE IF EXISTS tratta_di_riferimento;
                ';

                $db->query( $sql_drop_tratta_riferimento );

                $sql_create_tratta_riferimento='
                CREATE TEMPORARY TABLE tratta_di_riferimento (
                    SELECT
                      mezzi_tratte.id_tratte_libere
                    FROM
                      tratte_libere as tratte
                      JOIN tratte_libere_mezzi as mezzi_tratte ON tratte.id = mezzi_tratte.id_tratte_libere
                      JOIN mezzi ON mezzi_tratte.id_mezzi = mezzi.id
                    WHERE
                      TRUNCATE (
                        6363 * sqrt(
                          POW(
                            RADIANS("'.$latitudine_partenza.'") - RADIANS(tratte.latitudine_partenza),
                            2
                          ) + POW(
                            RADIANS("'.$longitudine_partenza.'") - RADIANS(tratte.longitudine_partenza),
                            2
                          )
                        ),
                        3
                      ) < (tratte.raggio_ricerca_km + '.$opzioni->distanza_max_tratta.')
                      AND TRUNCATE (
                        6363 * sqrt(
                          POW(
                            RADIANS("'.$latitudine_arrivo.'") - RADIANS(tratte.latitudine_arrivo),
                            2
                          ) + POW(
                            RADIANS("'.$longitudine_arrivo.'") - RADIANS(tratte.longitudine_arrivo),
                            2
                          )
                        ),
                        3
                      ) < (tratte.raggio_ricerca_km + '.$opzioni->distanza_max_tratta.')
                      AND mezzi.passeggeri >= "'.$passeggeri.'"
                      AND mezzi.bagagli >= "'.$bagagli.'"
                      AND mezzi.deleted_at IS NULL
                      AND mezzi_tratte.deleted_at IS NULL
                      AND tratte.deleted_at IS NULL
                    ORDER BY
                      mezzi_tratte.costo
                                LIMIT 1
                                );';/*end tratta di riferimento [PRENDE L\'ID DELLA TRATTA CON COSTO +BASSO]*/

                  $db->query( $sql_create_tratta_riferimento );
                 

                  $sql_drop_result_row ='
                  DROP TEMPORARY TABLE IF EXISTS result_row;
                  ';
 
                  $db->query( $sql_drop_result_row );
 
                  $sql_create_result_row='
                  CREATE TEMPORARY TABLE result_row(
                    SELECT
                      mezzi_tratte.id,
                      mezzi_tratte.id_tratte_libere,
                      mezzi_tratte.id_mezzi,
                      mezzi_tratte.costo as costo_tratta,
                      mezzi.id as id_tabella_mezzi,
                      mezzi.immagine,
                      mezzi.nome,
                      mezzi.descrizione as mezzi_descrizione,
                      mezzi.passeggeri,
                      mezzi.bagagli,                 
                      mezzi.costo_km_extra,
                      tratte.latitudine_partenza,
                      tratte.longitudine_partenza,
                      tratte.latitudine_arrivo,
                      tratte.longitudine_arrivo,
                      tratte.raggio_ricerca_km
                    FROM
                      tratte_libere as tratte
                        JOIN tratta_di_riferimento on tratte.id = tratta_di_riferimento.id_tratte_libere
                      JOIN tratte_libere_mezzi as mezzi_tratte ON tratte.id = mezzi_tratte.id_tratte_libere
                      JOIN mezzi ON mezzi_tratte.id_mezzi = mezzi.id
                    WHERE
                      TRUNCATE (
                        6363 * sqrt(
                          POW(
                            RADIANS("'.$latitudine_partenza.'") - RADIANS(tratte.latitudine_partenza),
                            2
                          ) + POW(
                            RADIANS("'.$longitudine_partenza.'") - RADIANS(tratte.longitudine_partenza),
                            2
                          )
                        ),
                        3
                      ) < (tratte.raggio_ricerca_km + '.$opzioni->distanza_max_tratta.')
                      AND TRUNCATE (
                        6363 * sqrt(
                          POW(
                            RADIANS("'.$latitudine_arrivo.'") - RADIANS(tratte.latitudine_arrivo),
                            2
                          ) + POW(
                            RADIANS("'.$longitudine_arrivo.'") - RADIANS(tratte.longitudine_arrivo),
                            2
                          )
                        ),
                        3
                      ) < (tratte.raggio_ricerca_km + '.$opzioni->distanza_max_tratta.')
                      AND mezzi.passeggeri >= "'.$passeggeri.'"
                      AND mezzi.bagagli >= "'.$bagagli.'"
                      AND mezzi.deleted_at IS NULL
                      AND mezzi_tratte.deleted_at IS NULL
                      AND tratte.deleted_at IS NULL
                    ORDER BY
                      mezzi_tratte.costo);';/*END RESULT ROW*/


                  $db->query( $sql_create_result_row );

                  $sql_drop_result_row2 ='
                  DROP TEMPORARY TABLE IF EXISTS result_row2;
                  ';
                  $db->query($sql_drop_result_row2);

                  $sql_create_result_row2 ='
                  CREATE TEMPORARY TABLE result_row2 (
                        select result_row.*,
                        TRUNCATE (
                                            6363 * sqrt(
                                              POW(
                                                RADIANS("'.$latitudine_partenza.'") - RADIANS(latitudine_partenza),
                                                2
                                              ) + POW(
                                                RADIANS("'.$longitudine_partenza.'") - RADIANS(longitudine_partenza),
                                                2
                                              )
                                            ),
                                            3
                                          ) +
                                      TRUNCATE (
                                            6363 * sqrt(
                                              POW(
                                                RADIANS("'.$latitudine_arrivo.'") - RADIANS(latitudine_arrivo),
                                                2
                                              ) + POW(
                                                RADIANS("'.$longitudine_arrivo.'") - RADIANS(longitudine_arrivo),
                                                2
                                              )
                                            ),
                                            3
                                          )-raggio_ricerca_km as km_differenza_totale
                                         
                        from result_row)';/*end result_row2*/
                   
                    $db->query( $sql_create_result_row2 );

                    $sql_finale='
             
                    SELECT  *,km_differenza_totale*costo_km_extra +costo_tratta as costo from result_row2;
                    ';

                    log_message('debug',$sql_create_tratta_riferimento.$sql_create_result_row.$sql_create_result_row2.$sql_finale);

                    $res=$db->query( $sql_finale )->getResult();
Reply
#4

Yes, that's also the solution. If you don't want to change the query, you can use $db->simpleQuery() - just like I showed in the bug report.

Glad you made it work - and thank you for the bug report.
Reply




Theme © iAndrew 2016 - Forum software by © MyBB