Delete produse care nu se afla in fisierul XML

PEAR, Smarty, ADOdb, OOP, PHP 5, XML, UML, Şabloane de proiectare, PHP-GTK.

Moderatori: coditza, Emil, Moderatori

ovy79ro
PHPRomania Supporter
Mesaje: 28
Membru din: Mie Mar 19, 2014 10:41 am

Delete produse care nu se afla in fisierul XML

Mesajde ovy79ro » Mar Mar 10, 2015 1:15 am

Salut,

Am un script prin care fac update dupa cod la produsele din baza de date. Mai exact, updatez preturile si stocurile produselor, dupa un fisier XML pe care-l primesc zilnic de la furnizor. Problema este ca sunt anumite produse care se afla la mine in baza de date si nu se afla in fisierul XML (acestea evident raman cu stocurile si preturile neactualizate). Vreau sa fac ca scriptul sa-mi caute toate produsele dupa codul lor, care se afla in db dar nu si in XML si sa le stearga. Ceva de genul: DELETE FROM ... WHERE cod NOT EXIST...

Ma poate ajuta cineva cu vreo indicatie?



nevvermind
Senior Member
Mesaje: 1264
Membru din: Mar Iun 22, 2010 3:17 pm

Re: Delete produse care nu se afla in fisierul XML

Mesajde nevvermind » Mar Mar 10, 2015 2:05 am

Aduna toate ID-urile din XML intr-un array de php.
Apoi

Cod: Selectaţi tot

DELETE FROM tabel_produse WHERE product_id NOT IN ('xml_product_id1', 'xml_product_id2' ...)

String-ul din NOT IN fa-l in php din acel array.
Intotdeauna fa un SELECT inainte sa faci DELETE sa vezi ce date urmeaza sa fie sterse; nu ma asculta pe mine.


Esti sigur ca trebuie sa le stergi? Zilnic?
Facusi un canal de php pe freenode - ##php-ro : https://webchat.freenode.net/

ovy79ro
PHPRomania Supporter
Mesaje: 28
Membru din: Mie Mar 19, 2014 10:41 am

Re: Delete produse care nu se afla in fisierul XML

Mesajde ovy79ro » Mar Mar 10, 2015 10:20 am

Salut,

Multumesc pentru raspuns.
Nu vreau neaparat sa le sterg (vroiam sa vad cam cum ar arata sintaxa), de fapt vreau sa updatez statusul produselor: am coloana 'status' unde daca valoarea e zero, statusul produsului se schimba in 'indisponibil'.
Conform indicatiilor trimise de tine, o sa incerc:
UPDATE tabel_produse SET status='0' WHERE product_id NOT IN ('$array_xml');

unde $array_xml este array-ul cu ID-urile produselor.

johnel
PHPRomania Supporter
Mesaje: 24
Membru din: Lun Aug 27, 2007 5:55 pm
Localitate: Bucuresti
Contact:

Re: Delete produse care nu se afla in fisierul XML

Mesajde johnel » Mar Mar 10, 2015 6:47 pm

Salut,
Depinde cate produse ai, dar eu as face altfel. (Daca ai de pastrat pe site doar produsele care iti apar in XML)
1. Inainte de a rula procedura de update din XML pui toate produsele din baza de date pe indisponibil. (schimbi statusul pe indisponibil)
2. Faci update de stoc, pret si setezi statusul pe disponibil pentru produsele pe care le ai in XML.

Numai bine!

ovy79ro
PHPRomania Supporter
Mesaje: 28
Membru din: Mie Mar 19, 2014 10:41 am

Re: Delete produse care nu se afla in fisierul XML

Mesajde ovy79ro » Mie Mar 11, 2015 9:57 am

Salut,


Merci johnel, pana la urma mi-ai dat o idee buna. Am setat cron-ul sa updateze statusul pe zero, dupa care il seteaza pe unu (disponibil) pentru fiecare produs din xml.
Totusi, ca fapt divers, nu se poate face si prin varianta cu UPDATE?

UPDATE tabel_produse SET status='0' WHERE product_id NOT IN ('$array_xml');

Din pacate nu am reusit sa implementez varianta propusa de nevvermind.


Înapoi la “PHP Avansat”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 31 vizitatori