Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [MySQL] Eliminare tutti i campi eccetto X, Y, Z

    Ciao a tutti,
    avrei bisogno di fare pulizia in un mio database ma non so bene come procedere.

    Supponiamo che io abbia una tabella di articoli strutturata in questo modo:

    ID | Nome articolo | Relazione

    Ogni articola ha un valore numerico "relazione" che fa riferimento ad un'altra tabella.

    Io vorrei eliminare tutti i campi della tabella articoli ad eccezione di quelli che hanno una determinata relazione. In un linguaggio "umano" vorrei fare una cosa del genere ma non so se è possibile farla con un comando sql:

    "ELIMINA * DA tab_articoli AD ECCEZIONE DI QUELLI CHE HANNO relazione = x, relazione = y, relazione = z

    Tenete presente che i campi da "risparmiare" sono moltissimi... in termini numerici la tabella "articoli" ha circa 11000 voci e la tabella "relazione" ne ha 8000. Dovrei quindi eliminare circa 3000 voci (11000 - 8000).

    Come potrei raggiungere questo risultato? Magari anche usando qualche ciclo php :|

    Grazie anticipatamente per l'aiuto!

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Capiamoci un pò meglio. Mi sembra che tu non voglia eliminare dei campi ma dei record ad eccezione di quelli che hanno il campo relazione pari a x, oppure a y oppure a z. E' così?

  3. #3
    Esattamente. Non campi ma record, mi sono espresso male.
    codice:
    DELETE FROM articoli WHERE relazione != x,y,z,etc,etc,(circa 8000 campi)
    grossomodo qualcosa del genere.

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    DELETE FROM articoli WHERE relazione not in (x,y,z)

    se x,y,z,ecc. sono valori numerici. Ma gli 8 mila valori li devi mettere a manina? (ammesso che sia fattibile) VVoVe:

    Non riesci a cancellare i record in modo più pratico?

  5. #5
    Originariamente inviato da nicola75ss
    DELETE FROM articoli WHERE relazione not in (x,y,z)

    se x,y,z,ecc. sono valori numerici. Ma gli 8 mila valori li devi mettere a manina? (ammesso che sia fattibile) VVoVe:

    Non riesci a cancellare i record in modo più pratico?
    Gli 8000 valori li ottengo in un paio di secondi grazie ad uno script
    Grazie mille per la query, secondo te può funzionare dato l'enorme numero di valori?

  6. #6
    Ciao,
    da quel che ho capito gli 8000 valori sono presenti su un'altra tabella. In tal caso puoi evitare di crearti uno script apposito per elencarli tutti ed inserirli nella query e puoi fare direttamente così:
    [CODE]
    DELETE FROM articoli WHERE relazione NOT IN (SELECT nome_campo_relazione FROM tabella_2 WHERE condizioni)
    [CODE]

    Alessandro
    Full Stack Developer presso Advice Lab
    Bonus Bitcoin
    Moon Bitcoin

  7. #7
    Ancora meglio!
    Grazie mille ragazzi!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.