I need to insert when rows don't exist in the tickets table and/or update when rows do exist with 1 query.
I tried the following and it doesn't add new records and it doesn't up the existing records.
$query_upsert = mysqli_query($mysqli,
"INSERT INTO tickets (
ticket_companyname,
ticket_ordernumber,
ticket_datetimedeliverydate,
ticket_ritech,
ticket_ticketstatus
)
SELECT
nextgenorder_companyname,
nextgenorder_ordernumber,
nextgenorder_deliverydate,
'$ticket_ritech',
'$ticket_ticketstatus'
FROM nextgenorders2
WHERE
nextgenorder_companyname LIKE CONCAT(SUBSTRING_INDEX('$nextgenorder_companyname', ' ', 1),'%')
AND nextgenorder_deliverydate='$nextgenorder_deliverydate'
ON DUPLICATE KEY UPDATE,
ticket_companyname='$ticket_companyname',
ticket_ordernumber='$ticket_ordernumber',
ticket_datetimedeliverydate='$ticket_datetimedeliverydate',
ticket_ritech='$ticket_ritech',
ticket_ticketstatus='$ticket_ticketstatus'
WHERE
ticket_companyname LIKE CONCAT(SUBSTRING_INDEX('$nextgenorder_companyname', ' ', 1),'%')
AND ticket_datetimedeliverydate='$nextgenorder_deliverydate'
)"
);
Can you use WHERE clause in a upsert query? I have all errors on and i'm not getting any errors.
Please help.
Thanks,
Problems and possible improvements with your query:
it has two
WHERE
clause: you want only one, which should appear after theSELECT
clauseyou are wide open to SQL injection you should use bind parameters
you don't need to repeat the parameter in the right side of the assignments: instead, you can use the
VALUES
syntaxAlso I think that you are trying to update too many fields in the
ON DUPLICATE KEY
clause, I removed some of them and let those that I thought were relevant (essentially, you don't need to update the columns that come into play to check for conflicts)
Consider:
INSERT INTO tickets (
ticket_companyname,
ticket_ordernumber,
ticket_datetimedeliverydate,
ticket_ritech,
ticket_ticketstatus
)
SELECT
nextgenorder_companyname,
nextgenorder_ordernumber,
nextgenorder_deliverydate,
?, --> query parameter for "ticket_ritech"
?, --> ... "ticket_ticketstatus"
FROM nextgenorders2
WHERE
nextgenorder_companyname
LIKE CONCAT(SUBSTRING_INDEX(?, ' ', 1),'%') --> ... "nextgenorder_companyname"
AND nextgenorder_deliverydate = ? --> ... "nextgenorder_deliverydate"
ON DUPLICATE KEY UPDATE,
ticket_ritech = VALUES(ticket_ritech)
ticket_ticketstatus = VALUES(ticket_ticketstatus)