Pagina 2 di 5 primaprima 1 2 3 4 ... ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 46
  1. #11
    Utente di HTML.it L'avatar di iaco74
    Registrato dal
    Sep 2002
    Messaggi
    682
    ok cambio i nomi in nomi univoci .....

    Grazie
    IACO

  2. #12
    Utente di HTML.it L'avatar di iaco74
    Registrato dal
    Sep 2002
    Messaggi
    682
    Scusa piero.mac ......
    Ma ci sono delle cose che non capisco.

    considerando le due tabelle di prima :

    tab1 (articoli) :
    modello
    tessuto
    colore

    tab2 (agg_articoli)

    agg_modello
    agg_tessuto
    agg_colore

    Faccio ad esempio questa query per trovare tutti i record che sono in entrambe le tabelle.

    codice:
    $sql_nuovi="SELECT * FROM agg_articoli, articoli WHERE agg_articoli.agg_modello = articoli.modello AND agg_articoli.agg_tessuto = articoli.tessuto AND agg_articoli.agg_colore=articoli.colore";
    Mi restituisce due record su 1701.
    E' giusta, in effetti ci sono solo due record uguali fra le due tabelle, che abbiano cioè lo stesso modello, tessuto, colore.

    Se provo l'inverso :

    codice:
    $sql_nuovi="SELECT * FROM agg_articoli, articoli WHERE agg_articoli.agg_modello <> articoli.modello AND agg_articoli.agg_tessuto <> articoli.tessuto AND agg_articoli.agg_colore <> articoli.colore";
    Mi vengono fuori risultati ciuccchi 34885 record (cavolo ecco perchè era lento me ne accorgo adesso), mentre avrebbero dovuto essere 1699.

    Sicuramente sbaglio io, le macchine hanno la testa di ferro.
    Perchè nel primo caso mi da il risultato giusto, invece nel secondo no ? La logica non è la stessa ?

    Quale è la sintassi giusta quando voglio confrontare tre campi per ogni tabella nella mia query ?

    Devo per caso usare le unioni esterne ?

    ciao
    IACO

  3. #13
    il secondo ti da un prodotto cartesiano ... uno contro tutti per ogni condizione messa.

    Ragionala un attimo...

    La prima seleziona i campi in base a tre AND. Massimizziamo il comportamento con indicazioni di fantasia...

    prende tutti i dati che corrispondono alla prima condizione where e li mette in una tabella temporanea. Ora applica, a questa ipotetica tabella temporanea, le restrizioni della seconda AND di where e li mette in una seconda ipotetica tabella temporanea. Siamo alla terza condizione che verra' applicata per ottenere il risultato richiesto.

    Prova ora a fare lo stesso ragionamento con la tua seconda query e capirai da solo.....

    Mette in una tabella temporanea tutti i dati diversi. poi per ogni record mette tutti i dati diversi della seconda condizione, e poi mettera' tutti i dati diversi, per ogni record, della terza condizione... ovunque e' diverso risulta vera la AND.

    Credo di essermi spiegato.... In questo caso dovresti usare OR e non AND.


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

  4. #14
    Utente di HTML.it L'avatar di iaco74
    Registrato dal
    Sep 2002
    Messaggi
    682
    grazie piero per la risposta

    Probabilmente continuo a sbagliare nel ragionamento

    Adesso sentito il tuo ragionamento mi torna che AND fosse sbagliato.

    Adesso ho provato con OR ma ho lo stesso 37419 record in risposta invece di 1699.

    Ma il risultato sarebbe errato anche se facessi semplicemente :

    codice:
    $sql="SELECT * FROM agg_articoli, articoli WHERE agg_articoli.agg_modello <> articoli.modello";
    37103 risultati, ma secondo me dovevano essere 1699.

    A questo punto mi sorge un dubbio ..... io come tipo tabella uso myIsam, è corretto ? Dovrei usare innoDB ?
    Devo specificare qualche relazione tra le tabelle ?

    Grazie per il tuo aiuto
    IACO

  5. #15
    Originariamente inviato da iaco74
    grazie piero per la risposta

    Probabilmente continuo a sbagliare nel ragionamento

    Adesso sentito il tuo ragionamento mi torna che AND fosse sbagliato.

    Adesso ho provato con OR ma ho lo stesso 37419 record in risposta invece di 1699.

    Ma il risultato sarebbe errato anche se facessi semplicemente :

    codice:
    $sql="SELECT * FROM agg_articoli, articoli WHERE agg_articoli.agg_modello <> articoli.modello";
    37103 risultati, ma secondo me dovevano essere 1699.

    A questo punto mi sorge un dubbio ..... io come tipo tabella uso myIsam, è corretto ? Dovrei usare innoDB ?
    Devo specificare qualche relazione tra le tabelle ?

    Grazie per il tuo aiuto
    Non c'entra la tabella.

    volevo dirtelo che non avrebbe funzionato.... da sempre un prodotto cartesiano ... record 1 contro tutti, record 2 contro tutti... ma volevo farti provare.... Devi precisare quale risultato vuoi ottenere.

    Sono sicuro che se ti poni la domanda lo vedrai da te quale potrebbe essere la risposta.

    Cosi' chiedi tutti i modelli che nella tabella a sono diversi dalla tabella b. Parti dal primo record e confronta. quindi la domanda e' errata, non la risposta.... non so se mi spiego.

    Al limite potevi chiedere tutti i modelli che sono in una tabella ma assenti nell'altra.... ma questo lo sai tu....


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

  6. #16
    Utente di HTML.it L'avatar di iaco74
    Registrato dal
    Sep 2002
    Messaggi
    682
    Bene ci sto provando .....

    Non e' un problema di tabella.
    Molto probabilmente non e' un problema di relazioni.

    Ho provato a fare cosi :

    $sql="SELECT agg_modello,agg_tessuto,agg_colore FROM agg_articoli, articoli WHERE agg_articoli.agg_modello AND agg_articoli.agg_tessuto AND agg_articoli.agg_colore <> articoli.modello OR articoli.tessuto OR articolo.colore";

    La prima parte mi potrebbe anche tornare rifacendomi al ragionamento di prima "primo record contro tutti eccc .

    La seconda non mi torna ma per ora e' il massimo che sono riuscito a fare.

    Chiaramente ancora non funziona come sai, ma mi ci sto avvicinando, almeno credo.
    IACO

  7. #17
    manca di logica ... tre campi in AND diversi da tre campi in OR. Tieni presente poi le priorita' .... usando OR sarebbe da valutare un opportuno uso di parentesi.

    Ma quello che non capisco e': hai due tabelle. Come e' il rapporto tra queste due tabelle? Dalla tua descrizione si direbbero in rapporto uno ad uno. se fosse cosi' dove sarebbero le diversita'?

    Penso invece che ti stai mettendo in una relazione molti a molti.... cioe' dove un articolo puo' avere molti colori e dall'altra un colore puo' essere di molti articoli. E dall'inizio che lo penso, ma niente di meglio che toccare con mano.

    ti manca una tabella, definita intermezzo, che ti collega il prodotto articoli in tabella a con la caratteristica del colore in tabella b. La struttura del db che non va in altre parole.


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

  8. #18
    Utente di HTML.it L'avatar di iaco74
    Registrato dal
    Sep 2002
    Messaggi
    682
    ok ......

    Apparte la struttura adesso ci rifletterò.

    Tabella agg_articoli :

    Campi
    agg_id (primaria)
    agg_modello
    agg_tessuto
    agg_colore

    Tabella articoli

    id (primaria)
    modello
    tessuto
    colore

    Ammettiamo volessi trovare tutti i record che hanno semplicemente un id diverso come dovrei fare ?

    Io avevo provato cosi :

    $sql="SELECT agg_id FROM agg_articoli WHERE agg_articoli.agg_id <> 'SELECT id from articoli'"

    Questa query non mi dovrebbe restituire tutti i record della tabella agg_articoli che hanno un id diverso dalla tabella articoli ?

    Invece me li restituisce tutti.
    So che sbaglio io ma non capisco dove
    IACO

  9. #19
    Ammesso ma non concesso che io abbia capito....

    in tabella agg_articoli hai i valori
    in tabella articoli hai gli id di riferimento ai valori.

    dove' la relazione tra queste tabelle?
    codice:
    agg_id agg_modello agg_tessuto agg_colore 
    500       lungo        satin       rosa
    
    id      modello    tessuto     colore  
    1         ????      ????        ????
    che hai negli interrogativi....?????

    da come descrivi le tabelle agg_articoli sembrerebbe essere semplicemente una tabella dove fare gli aggiornamenti in attesa di trasferire i dati in articoli.

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

  10. #20
    Utente di HTML.it L'avatar di iaco74
    Registrato dal
    Sep 2002
    Messaggi
    682
    da come descrivi le tabelle agg_articoli sembrerebbe essere semplicemente una tabella dove fare gli aggiornamenti in attesa di trasferire i dati in articoli.
    Esatto sarà proprio cosi.

    La relazione non c'e'.

    Come si fa in mysql a mettere le relazioni ?

    In access uso il pannello relazioni, ma in mysql non ho mai usato le relazioni
    IACO

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.