-
pippuccio76 Senior Member
   
-
Posts: 547
Threads: 231
Joined: Jun 2017
Reputation:
2
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
-
pippuccio76 Senior Member
   
-
Posts: 547
Threads: 231
Joined: Jun 2017
Reputation:
2
(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 
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();
|