Php script insert sql selection into mysql database table

I try to insert a sql selection into a mysql table and use a php script with following statement:

$sql = "INSERT INTO groeperingInjectieAfname 
SELECT 
VerschilBerekeningInjectie.datum as datum,
VerschilBerekeningInjectie.uur as uur ,
VerschilBerekeningInjectie.injectieDag as injectieDag,
VerschilBerekeningInjectie.injectieNacht as injectieNacht, 
VerschilBerekeningInjectie.injectieTotaal as injectieTotaal,
VerschilBerekening1.afnameDag as afnameDag,
VerschilBerekening1.afnameNacht as afnameNacht, 
VerschilBerekening1.afnameTotaal as afnameTotaal 
FROM VerschilBerekeningInjectie LEFT JOIN VerschilBerekening1 ON VerschilBerekeningInjectie.datum = VerschilBerekening1.datum and VerschilBerekeningInjectie.uur = VerschilBerekening1.uur  and VerschilBerekeningInjectie.datum = '$yesterday' ";

I get following error:
The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1

when i check the selection in phpMyAdmin with following query:

SET SQL_BIG_SELECTS=1;

SELECT 
VerschilBerekeningInjectie.datum as datum,
VerschilBerekeningInjectie.uur as uur ,
VerschilBerekeningInjectie.injectieDag as injectieDag,
VerschilBerekeningInjectie.injectieNacht as injectieNacht, 
VerschilBerekeningInjectie.injectieTotaal as injectieTotaal,
VerschilBerekening1.afnameDag as afnameDag,
VerschilBerekening1.afnameNacht as afnameNacht, 
VerschilBerekening1.afnameTotaal as afnameTotaal 
FROM VerschilBerekeningInjectie LEFT JOIN VerschilBerekening1 ON VerschilBerekeningInjectie.datum = VerschilBerekening1.datum and VerschilBerekeningInjectie.uur = VerschilBerekening1.uur WHERE VerschilBerekeningInjectie.datum = '2021-02-05'

The selection is correct.
But I can’t get this query in an php script.
I tried to make two lines:

$sql="SET SQL_BIG_SELECTS=1;"   

and

$sql="$sql = "INSERT INTO groeperingInjectieAfname 
SELECT VerschilBerekeningInjectie.datum as datum,....."

this doesn’t work.
Anyone can help me?

Error in

$sql="$sql = “INSERT INTO groeperingInjectieAfname..."

Should be…

$sql="$sql INSERT INTO groeperingInjectieAfname...;"

P.S. Nur neugierig… Wieso benennst du deine DB Tabellen und Felder auf Niederländisch, nicht auf Englisch?

…how many records do you have in your table? MAX_JOIN_SIZE defaults to 18 quintillion… (2^64)

Hi Igor,
thanks for your answer.
was a typo.
I intended:
$sql=“SET SQL_BIG_SELECTS=1;”
$sql = “INSERT INTO groeperingInjectieAfname SELECT VerschilBerekeningInjectie.datum as datum,…”

but the question remains, how can this query be implemented in a php script?
Is it possible to use the two $sql queries consecutivily?

By the way, the DB tables are in dutch because I am the only user of this database.
regards,

I realy don’t understand the problem… If you have:

$sql1 = '...;'

and

$sql2 = '...;'

You able to create…

$sql = $sql1 . $sql2;

and execute it.

Hi,
the select query results in 197 records

@igor_g
I tried
$sql1 = “SET SQL_BIG_SELECTS=1”;
$sql2 = "INSERT INTO groeperingInjectieAfname
SELECT
VerschilBerekeningInjectie.datum as datum,
VerschilBerekeningInjectie.uur as uur ,
VerschilBerekeningInjectie.injectieDag as injectieDag,
VerschilBerekeningInjectie.injectieNacht as injectieNacht,
VerschilBerekeningInjectie.injectieTotaal as injectieTotaal,
VerschilBerekening1.afnameDag as afnameDag,
VerschilBerekening1.afnameNacht as afnameNacht,
VerschilBerekening1.afnameTotaal as afnameTotaal
FROM VerschilBerekeningInjectie LEFT JOIN VerschilBerekening1 ON VerschilBerekeningInjectie.datum = VerschilBerekening1.datum and VerschilBerekeningInjectie.uur = VerschilBerekening1.uur and VerschilBerekeningInjectie.datum = ‘2021-02-15’ ";

$sql = $sql1 . $sql2;

if ($dbconnect->query($sql) === TRUE) {
echo “Tabel groeperingInjectieAfname successfully”;
} else {
echo "Error creating table: " . $dbconnect->error;
}

this results in following error message:
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ‘INTO groeperingInjectieAfname SELECT VerschilBerekeningInjectie.datum as da…’ at line 1

the select query is OK (checked it in phpMyadmin).
is it the combination insert/select or the php expression???

Hm… I see no syntax error. Could it be a problem that fields list failed? Actually, that is not required.
MySQL :: MySQL 8.0 Reference Manual :: 13.2.6.1 INSERT … SELECT Statement

Try to test the query completely in phpMyAdmin. And try by testing to simplify query at first - without join, with single field and so on…

@igor_g
as you proposed, I tried the query completely in phpMyAdmin:

SET SQL_BIG_SELECTS=1;
INSERT INTO groeperingInjectieAfname
SELECT
VerschilBerekeningInjectie.datum as datum,
VerschilBerekeningInjectie.uur as uur ,
VerschilBerekeningInjectie.injectieDag as injectieDag,
VerschilBerekeningInjectie.injectieNacht as injectieNacht,
VerschilBerekeningInjectie.injectieTotaal as injectieTotaal,
VerschilBerekening1.afnameDag as afnameDag,
VerschilBerekening1.afnameNacht as afnameNacht,
VerschilBerekening1.afnameTotaal as afnameTotaal
FROM VerschilBerekeningInjectie LEFT JOIN VerschilBerekening1 ON VerschilBerekeningInjectie.datum = VerschilBerekening1.datum and VerschilBerekeningInjectie.uur = VerschilBerekening1.uur and VerschilBerekeningInjectie.datum = ‘2021-02-15’

the select part works fine.
the complete query inclusive the insert part is wrong:

  • the join of the tables is not correct;
  • all the records are selected and not only the dates of ‘2021-02-15’.

The joining of the tables is OK when I do only the select part, so the insert part must be reconsidered.
regards.

Of course, becouse first table in LEFT JOIN will be in result set completely. To get the date only you should to place this condition in WHERE…

FROM VerschilBerekeningInjectie 
LEFT JOIN VerschilBerekening1 
ON VerschilBerekeningInjectie.datum = VerschilBerekening1.datum 
AND VerschilBerekeningInjectie.uur = VerschilBerekening1.uur 
WHERE VerschilBerekeningInjectie.datum = ‘2021-02-15’

What exactly is wrong? What is error?

when I use phpMyAdmin with:

INSERT INTO groeperingInjectieAfname
SELECT
VerschilBerekeningInjectie.datum as datum,
VerschilBerekeningInjectie.uur as uur ,
VerschilBerekeningInjectie.injectieDag as injectieDag,
VerschilBerekeningInjectie.injectieNacht as injectieNacht,
VerschilBerekeningInjectie.injectieTotaal as injectieTotaal,
VerschilBerekening1.afnameDag as afnameDag,
VerschilBerekening1.afnameNacht as afnameNacht,
VerschilBerekening1.afnameTotaal as afnameTotaal
FROM VerschilBerekeningInjectie LEFT JOIN VerschilBerekening1 ON VerschilBerekeningInjectie.datum = VerschilBerekening1.datum and VerschilBerekeningInjectie.uur = VerschilBerekening1.uur WHERE VerschilBerekeningInjectie.datum = ‘2021-02-15’

THE INSERT IS CORRECT

when I use the php script with:

$sql1 = “SET SQL_BIG_SELECTS=1”;
$sql2 = "INSERT INTO groeperingInjectieAfname
SELECT
VerschilBerekeningInjectie.datum as datum,
VerschilBerekeningInjectie.uur as uur ,
VerschilBerekeningInjectie.injectieDag as injectieDag,
VerschilBerekeningInjectie.injectieNacht as injectieNacht,
VerschilBerekeningInjectie.injectieTotaal as injectieTotaal,
VerschilBerekening1.afnameDag as afnameDag,
VerschilBerekening1.afnameNacht as afnameNacht,
VerschilBerekening1.afnameTotaal as afnameTotaal
FROM VerschilBerekeningInjectie LEFT JOIN VerschilBerekening1 ON VerschilBerekeningInjectie.datum = VerschilBerekening1.datum and VerschilBerekeningInjectie.uur = VerschilBerekening1.uur WHERE VerschilBerekeningInjectie.datum = ‘2021-02-15’ ";

$sql = $sql1 . $sql2;

if ($dbconnect->query($sql) === TRUE) {
echo “Tabel groeperingInjectieAfname successfully”;
} else {
echo "Error creating table: " . $dbconnect->error;
}

NO INSERT AS RESULT.
ERROR MESSAGE:
Error creating table: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ‘INTO groeperingInjectieAfname SELECT VerschilBerekeningInjectie.datum as da…’ at line 1.

I don’t get why the phpMyAdmin action works, but the php script gives an error.

regards

Correct without SET SQL_BIG_SELECTS=1?

Sorry,
No, the insert action is only correct with SET SQL_BIG_SELECTS=1;

I remember some similar question. PDO has problems with multiple queries, but I thougth, not with SET-query.

Try…

$dbconnect->query($sql1);
$dbconnect->query($sql2)

Fantastic, this did the job!
many thanks
Paul