Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17

Discussione: Aiuto Query MySQL

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2000
    Messaggi
    243

    Aiuto Query MySQL

    Ciao.

    Ho il seguente problema.

    Concettualmente ho una tabella che io definisco template perchè è un elenco di voci che mi servono come struttura tipica.

    Poi ho una tabella che definisco scheda dove faccio un insert andando a prelevare le voci dal template.

    L'utilità e che se in futuro le schede dovranno contenere nuove voci posso modificare il template e le successive create saranno del nuovo tipo mentre le vecchie dove la nuova voce non serviva rimangono inalterate.


    Ora ho però la seguente necessità.

    Mettiamo che si perda del tempo a compilare una scheda e poi alla fine si abbia la necessità di aggiungere una voce.

    Vorrei fare in modo che una volta aggiornato il template, con una quey sql io possa inserire nella scheda solamente le nuove voci, ovvero quelle diverse rispetto alle presenti.

    Così facendo manterrei inalterata la compilazione già eseguita e verrebbero aggiunte le voci nuove.

    Vi allego la query che già uso per l'insert da template.




    INSERT INTO soggetti (idu,idev,soggetto)

    (

    SELECT tsoggetti.id, eventi.id, tsoggetti.soggetto

    FROM eventi, tsoggetti

    WHERE eventi.id = '" . $id . "'

    ORDER BY soggetto

    )




    Grazie

  2. #2
    hai scordato di dire qual'e' il problema.

    nella query hai fatto una JOIN tra due tabelle senza mettere nel where la loro relazione.
    Cos'e' che lega le tabelle eventi, tsoggetti ?

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2000
    Messaggi
    243
    Non sono proprio legate.. eventi mi serve solo per inserire l'id evento nella tabella dei soggetti... l'id lo passo via php..
    Questa è la query che già uso e funziona quando inizializzo le nuove schede..


    Io vorrei come ho gia spiegato fare l'insert dei nuovi soggetti aggiunti al template (tsoggetti) nella tabella soggetti

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2000
    Messaggi
    243
    Una volta che ho già la scheda inizializzata ovvero dopo aver eseguito la suddetta query vorrei concettualmente fare una cosa del tipo:


    INSERT INTO soggetti (idu,idev,soggetto)

    (

    SELECT tsoggetti.id, eventi.id, tsoggetti.soggetto

    FROM eventi, tsoggetti

    WHERE eventi.id = '" . $id . "'

    AND tsoggetti.soggetto NOT LIKE TUTTI I SOGGETTI GIA INSERITI IN soggetti

    ORDER BY soggetto

    )

    WHERE idev = '" . $id . "'

  5. #5
    non credo che "concettualmente" sia fattibile.

    Insisto su fatto che ci deve essere un legame tra le due tabelle in JOIN oppure ottieni un risultato cartesiano delle righe del result set.

    in pratica che da una tabella "eventi" selezioni un id dovrebbe darti UN SOLO record e fin qui ci sta, ma quale record dovrebbe darti dell'altra tabella t.soggetti ? e sopratutto come faresti a dirgli che un certo record "soggetto" va abbinato a quell'id e che non deve esistere in soggetti???


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2000
    Messaggi
    243
    Forse mi sono spiegato male perdonami..

    So che partendo da zero senza sapere che cosa devo effettivamente fare e a cosa mi serve risulta ostico capire la struttura..

    Questa è la struttura dalla quale ho tolto le tabelle inutili per semplicità contenenti dati testuali di informazioni...




    -- Struttura della tabella "eventi"

    CREATE TABLE `eventi` (
    `id` int(11) UNSIGNED NOT NULL auto_increment,
    `evento` varchar(100) default NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;




    -- Struttura della tabella "soggetti"

    CREATE TABLE `soggetti` (
    `id` int(11) UNSIGNED NOT NULL auto_increment,
    `idu` int(11) UNSIGNED default NULL,
    `idev` int(11) UNSIGNED default NULL,
    `soggetto` varchar(50) default NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;


    La tabella soggetti è legata al singolo evento tramite IDEV
    IDU mi serve perchè ho una seconda tabella con le attività di ciascun soggetto ma questo non ha importanza ora..




    -- Struttura della tabella "tsoggetti"

    CREATE TABLE `tsoggetti` (
    `id` int(11) UNSIGNED NOT NULL auto_increment,
    `soggetto` varchar(50) default NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;


    tsoggetti è il TEMPLATE dal quale seleziono TUTTO il contenuto e lo spedisco in soggetti con la query del mio PRIMO POST.


    Ricorda che l'id evento lo conosco in anticipo perchè dalla lista della tabella eventi accedo ai soggetti tramite IDEV.

    È un programma in php..

  7. #7
    Non mi sono spiegato manco io. Vediamo di farlo.

    Prima di tutto non si puo' fare un insert ... select pescando dati che nella select sono della tabella in INSERT e quindi non puoi con una query sapere se il valore sia "NOT IN" nella tabella di destinazione.

    Vediamo ... prelevi tre dati per destinarli alla tabella soggetto:

    idu, idev, soggetto

    dalla tabella eventi selezioni solo "eventi.id" di cui pero' sai pure l'id. prima domanda che lo selezioni a fare se gia' ce l'hai? Per vedere se c'e'?

    dalla tabella tsoggetti vuoi prendere due valori: id e soggetto ... qui la domanda: quali? Non hai alcun riferimento, quali di questi valori dovrebbe prendere? Gli ultimi NOT IN in tab. soggetto? Se si, allora dovresti prima ottenere la lista con le differenze (NOT IN) dalla tabella soggetto e tsoggetto. Ma per soggetto.idev cosa dovresti mettere? cioe' quale e' l'evento che andrebbe associato al soggetto nel caso ci fossero piu' record da aggiornare?

    Come si fa a darti una risposta a cose che sai solo tu? in compenso pero' si possono fare tante domande...

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2000
    Messaggi
    243
    Allora aspetta....
    Ritorniamo ad un approccio step by step..


    con questa query "INIZIALIZZO" i soggetti di un evento..

    INSERT INTO soggetti (idu,idev,soggetto)

    (

    SELECT tsoggetti.id, eventi.id, tsoggetti.soggetto

    FROM eventi, tsoggetti

    WHERE eventi.id = '" . $id . "'

    ORDER BY soggetto

    )

    Non sono un esperto di sql, quello che so l'ho imparato da me quindi sono sicuro che ci sono più metodi per raggiungere lo stesso scopo..

    Però questa query funziona perfettamente ovvero inserisce in soggetti, TUTTI i soggetti estratti dal template TSOGGETTI con una subquery.

    TSOGGETTI È UN CATALOGO!

    Ho inserito EVENTI.ID perchè deve essere compilato per ogni IDEV di ogni soggetto che estrapolo da TSOGGETTI e inglobandolo nella subquery non da nessun problema.


    Otterrò una tabella soggetti che verrà popolata man mano con liste di soggetti estratte da TSOGGETTI ma che saranno legate all'evento tramite IDEV.


    Tutto chiaro?
    Sino a qui funziona tutto egregiamente..


    Il mio problema sarebbe avere una query che possa, per i soggetti con un dato IDEV, fare il controllo sul template TSOGGETTI ed inserire eventuali nuovi record diversi da quelli già presenti in SOGGETTI con il dato IDEV.

    Non capisco cosa non capisci...

    Grazie

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2000
    Messaggi
    243
    oppure molto più semplicemente..

    partendo da


    SELECT tsoggetti.id, eventi.id, tsoggetti.soggetto

    FROM eventi, tsoggetti

    WHERE eventi.id = '" . $id . "'

    ORDER BY soggetto


    Riuscirei SECONDO TE ad adattarla per effetture una select identica a questa MA che in più mi selezioni solo le righe che soddisfino la condizione TSOGGETTI.SOGGETTO diverso da SOGGETTI.SOGGETTO per le righe con un dato IDEV?

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2000
    Messaggi
    243
    forse con un ulteriore subquery che seleziona tutti i soggetti in soggetti... ora provo

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 © 2025 vBulletin Solutions, Inc. All rights reserved.