sql >> Database teknologi >  >> RDS >> Oracle

PHP Oracle forespørgsel vælg erklæring inde i løkke langsom

Hvis jeg har læst din kode korrekt, er det du leder efter en enkelt MERGE-sætning, som du kan køre på databasen. Jeg kender ikke PHP, så jeg kan ikke give dig, hvordan det skal kaldes, men jeg kan give dig SQL-sætningen til at køre:

MERGE INTO mep_tbl_output_details tgt
  USING (SELECT mtm.modelid,
                mtm.model_name,
                mtmc.configurationid,
                mtmc.date_code,
                mtmc.read_row_after,
                mtmc.create_from_format,
                mtmc.ip_address,
                mtmc.status,
                mtmc.ts_code
         FROM   mep_tbl_model mtm
                INNER JOIN mep_tbl_model_configuration mtmc ON mtm.modelid = mtmc.modelid_fk
         WHERE  mtm.active = 'Y'
         AND    mtm.location = 'PCBA') src
    ON (tgt.modelid_fk = src.modelid
        AND tgt.ts_code = src.ts_code
        AND tgt.configurationid_fk = src.configurationid
        AND tgt.runningdate = :log_date
        AND tgt.shift = 'Morning'
        AND tgt.quantity_status = 'OK')
WHEN NOT MATCHED THEN
  INSERT (tgt.modelid_fk, tgt.running_date, tgt.quantity_status, tgt.ts_code, tgt.shift, tgt.configuration_fk)
  VALUES (src.modelid, :log_date, 'OK', src.ts_code, 'Morning', src.configurationid);

Dette udfører den join, du genopfandt med dine loops, linker den tilbage til den tabel, du forsøger at indsætte i, og indsætter kun en række, hvis den ikke allerede findes i tabellen.

Du skal skrive PHP-koden for at udføre dette, efter at have passeret log_date som en bindevariabel.

Ved at binde variablen tillader du databasen at springe den hårde analyse over (dvs. at finde ud af den bedste måde at udføre forespørgslen på), hvilket sparer tid.

Ved ikke at hente data og manuelt sløjfe rundt, før du vælger flere data og finde ud af, om du skal lave indsættelsen, springer du en hel masse kontekstskifte og trække/skubbe data over netværket. Lad databasen gøre det tunge løft; det er det, den er designet til at gøre!




  1. MySQL COALESCE og NULLIF funktion

  2. Sådan giver du fortrinsret til null-værdi under valg

  3. SQL mellem operatør

  4. hvordan indstilles det valgte værditag <select> html fra databasen i php?