Visualizzazione dei risultati da 1 a 9 su 9

Discussione: [MySQL]

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    35

    [MySQL]

    Ciao a tutti,
    sono alle prime armi col MySQL e ho un mezzo problemino....
    Ho 2 tabelle, una di nome "veicoli" con i campi id, marca, modello e l'altra di nome "dettagli" con campi id, km, colore, anno.
    Potete dirmi cosa dovrebbe fare questa query:

    select * from veicoli,dettagli where km>14000 and colore=’rosso’;

    L'effetto ottenuto non è lo stesso che dovrei ottenere secondo il manuale che sto seguendo...
    Grazie

  2. #2
    seleziona i dati nelle tabelle veicli e dettagli, ma solo quelli ke hanno km>14000 e il colore=rosso
    uh? eh ? cosa?

  3. #3
    le due tabelle devono avere un campo in comune che non prendi in considerazione.

    In altre parole qual'e' la relazione tra le due tabelle? devi metterla nel where altrimenti come fai a definire a quale veicolo si riferisce il dettaglio?

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

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    35

    Re: [MySQL]

    Originariamente inviato da Alex12
    Ciao a tutti,
    sono alle prime armi col MySQL e ho un mezzo problemino....
    Ho 2 tabelle, una di nome "veicoli" con i campi id, marca, modello e l'altra di nome "dettagli" con campi id, km, colore, anno.
    Potete dirmi cosa dovrebbe fare questa query:

    select * from veicoli,dettagli where km>14000 and colore=’rosso’;

    L'effetto ottenuto non è lo stesso che dovrei ottenere secondo il manuale che sto seguendo...
    Grazie
    Dunque, questo è quello che avrei dovuto ottenere secondo il manuale... il risultato invece è diverso... mi crea una tabella di risposta con 10 campi ripetendo più volte alcuni record e modificandone altri. Modifica il colore di tutte le automobili facendolo diventare rosso...

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    35
    Originariamente inviato da Frankenstein88
    seleziona i dati nelle tabelle veicli e dettagli, ma solo quelli ke hanno km>14000 e il colore=rosso
    Dunque, la sintassi esatta è questa:

    create table veicoli(id int primary key,marca char(20) not null, modello char(20) not null);

    create table dettagli(id int primary key references veicoli(id),km smallint not null, colore char(20) not null, anno int not null);

    select * from veicoli,dettagli where km>14000 and colore=’rosso’;

  6. #6
    quella query estrae dei records dalle due tabelle "veicoli" e "dettagli", aventi il campo "km" maggiore di 14.000 (suppongo sia un campo della tabella "veicoli", giusto?) ed il campo "colore" uguale a "rosso" (suppongo sia un campo della tabella "dettagli"). è generalmente una notazione poco corretta (perlomeno in casi come questo) perchè non imposta le giuste relazioni tra una tabella e l'altra. consiglio questa forma:

    codice:
    SELECT *
    FROM veicoli
    LEFT JOIN dettagli ON dettagli.id_veicolo = veicoli.id_veicolo
    WHERE km > 14000 AND colore LIKE 'rosso'
    che dice al motore di MySQL di estrarre tutti i veicoli con più di 14.000 KM e di colore rosso (come prima), ma mettendo in relazione la tabella dei dettagli con quella dei veicoli, secondo un campo "id_veicolo" (che è l'ID chiave della tabella "veicoli") che deve essere comune ad entrambe le tabelle (ogni record della tabella "dettagli" deve avere un riferimento al veicolo, altrimenti non puoi sapere a cosa si riferisca quel particolare dettaglio. questo riferimento è un campo che riporta l'ID del veicolo al quale è collegato).

    nella clausola WHERE, quando si lavora con le stringhe, è sempre buona norma usare l'operatore LIKE anzichè l'operatore = quando non deve necessariamente essere rispettata un'uguaglianza perfetta tra le due stringhe. in particolare, l'operatore = è case-sensitive ('rosso' viene valutato diversamente da 'Rosso', quindi la ricerca secondo la stringa 'rosso' non estrarrebbe il veicolo 'Rosso'), mentre LIKE è case-insensitive (ricercando 'rosso' viene trovato anche 'Rosso').

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    35
    Originariamente inviato da OhMyGod
    quella query estrae dei records dalle due tabelle "veicoli" e "dettagli", aventi il campo "km" maggiore di 14.000 (suppongo sia un campo della tabella "veicoli", giusto?) ed il campo "colore" uguale a "rosso" (suppongo sia un campo della tabella "dettagli"). è generalmente una notazione poco corretta (perlomeno in casi come questo) perchè non imposta le giuste relazioni tra una tabella e l'altra. consiglio questa forma:

    codice:
    SELECT *
    FROM veicoli
    LEFT JOIN dettagli ON dettagli.id_veicolo = veicoli.id_veicolo
    WHERE km > 14000 AND colore LIKE 'rosso'
    che dice al motore di MySQL di estrarre tutti i veicoli con più di 14.000 KM e di colore rosso (come prima), ma mettendo in relazione la tabella dei dettagli con quella dei veicoli, secondo un campo "id_veicolo" (che è l'ID chiave della tabella "veicoli") che deve essere comune ad entrambe le tabelle (ogni record della tabella "dettagli" deve avere un riferimento al veicolo, altrimenti non puoi sapere a cosa si riferisca quel particolare dettaglio. questo riferimento è un campo che riporta l'ID del veicolo al quale è collegato).

    nella clausola WHERE, quando si lavora con le stringhe, è sempre buona norma usare l'operatore LIKE anzichè l'operatore = quando non deve necessariamente essere rispettata un'uguaglianza perfetta tra le due stringhe. in particolare, l'operatore = è case-sensitive ('rosso' viene valutato diversamente da 'Rosso', quindi la ricerca secondo la stringa 'rosso' non estrarrebbe il veicolo 'Rosso'), mentre LIKE è case-insensitive (ricercando 'rosso' viene trovato anche 'Rosso').


    Ciao, grazie per la dritta sul "like"
    Ho provato la parte di codice che mi hai dato tu, ma mi da un errore:

    Unknown column 'dettagli.id_veicolo' in 'on_clause'

    In ogni caso è troppo avanzato per me... sono proprio alle primissime armi e non ho ancora affrontato parole come left, join ecc.
    La query che ho postato io è totalmente sbagliata, o è "consigliabilmente" sbagliata?
    Ho già trovato altri errori in questo manuale (ad esempio smallint è troppo piccolo per i valori che mi chiede di inserire, oppure nella creazione delle tabelle specifica 'not null' per alcuni campi, ma poi non ne tiene conto al momento del riempimento delle tabelle...), quindi se anche in questo caso c'è un errore vero e proprio mollo questo manuale e ricomincio da 0 su un altro...

  8. #8
    Originariamente inviato da Alex12
    Ho provato la parte di codice che mi hai dato tu, ma mi da un errore:

    Unknown column 'dettagli.id_veicolo' in 'on_clause'

    In ogni caso è troppo avanzato per me... sono proprio alle primissime armi e non ho ancora affrontato parole come left, join ecc.
    La query che ho postato io è totalmente sbagliata, o è "consigliabilmente" sbagliata?
    il campo "id_veicolo" nella tabella "dettagli" me lo sono inventato perchè quando ho iniziato a scrivere, ancora non erano state postate tutte le varie risposte che ci sono prima della mia, quindi non conoscevo i nomi dei campi che hai tu nelle tabelle.

    la query che hai trovato nel libro è sbagliata per fare quello che dovevi fare... ha senso in altri casi particolari ma non in questo.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    35
    Originariamente inviato da OhMyGod
    il campo "id_veicolo" nella tabella "dettagli" me lo sono inventato perchè quando ho iniziato a scrivere, ancora non erano state postate tutte le varie risposte che ci sono prima della mia, quindi non conoscevo i nomi dei campi che hai tu nelle tabelle.

    la query che hai trovato nel libro è sbagliata per fare quello che dovevi fare... ha senso in altri casi particolari ma non in questo.

    Grazie mille per le spiegazioni dettagliate e utili...

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.