Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1

    Problema query di inserimento

    Ciao!
    Vi spiego brevemente il mio problema.
    Devo gestire un sito di Annunci Immobiliari.

    L'utente deve inserire l'immobile.

    Io ho creato la tabella IMMOBILE con attributi:
    - id_i [chiave primaria, autoincrementale]
    - tipo [appartamento, villa, ecc]
    - uso [commerciale o privato]
    - mq
    - posto auto [booleano]
    - descrizione
    - numero di locali [solo in caso di appartamento]

    e la tabella RECAPITO per l'indirizzo
    - id_i [chiave primaria, referenzia id_i di immobile]
    - via
    - numero civico
    - piano [solo in caso di appartamento]

    Lasciando perdere la scelta degli attributi (è un progetto universitario) il mio problema è:
    ho inizialmente creato la mia query per l'inserimento dei dati in IMMOBILE e fin qui tutto bene.
    Come faccio ad inserire i miei dati in RECAPITO dal momento che non conosco id_i?

    Avevo pensato a 2 opzioni di query con select:
    (1) SELECT id_i FROM immobile WHERE tipo= "'.$tipo.'" AND mq=" ....blablabla
    --> ma ci potrebbe essere una rara eventualità di più immobili con lo stesso uso, tipo, mq, posto auto, descrizione e numero di locali. Quindi non ho un unico risultato.

    (2) SELECT MAX(id_i) FROM immobile
    --> partendo dal presupposto che id_i è autoincrementale e che quindi l'ultimo immobile inserito abbia l'id_i maggiore, mi sembrava una buona idea. Ma cosa succede se due utenti aggiungono un immobile contemporaneamente? Non si rischia di inserire il recapito di un immobile al posto di un altro?


    AVETE DELLE IDEE MIGLIORI DELLA MIA? Dovrei cambiare gli identificatori delle tabelle???
    Grazie!

  2. #2
    Per recuperare l'id generato in auto-increment dall'ultima operazione eseguita puoi utilizzare la funzione mysql_insert_id().
    Riguardo al secondo problema puoi utilizzare una transazione per effettuare le sue insert QUI trovi un esempio anche se è riferito a MySQL 4.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591
    io farei tutto in una tabella.. le caratteristiche dell'appartamento meglio tutte in un posto.. che senso ha mettere in una tabella il numero di posti auto e in un'altra l'indirizzo..
    poi puoi mettere il tipo di locazione o tutti i dati che possono avere valori "costantemente-variabili" in altre tabelle in modo da non avere valori ridondanti..

  4. #4
    Il problema è che non posso usare nessuna delle due query perché la prima non mi dà un risultato univoco e la seconda mi porta ad un errato inserimento.
    Avevo bisogno di una terza opzione!

    E poi sto usando Postgres.

  5. #5
    Originariamente inviato da michellemabelle
    ...
    E poi sto usando Postgres.
    Questo non lo avevi specificato.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  6. #6
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591
    ..te lo ha detto il prof. di fare 2 tabelle? a che pro?

  7. #7
    @Satifal: Scusa! Hai ragione!
    @Telegio: no, non l'ha detto lui, ma dice sempre di non mettere troppi attributi in una sola tabella. Se le unissi avrei 11 attributi.

  8. #8

    Re: Problema query di inserimento

    Originariamente inviato da michellemabelle
    ...
    Ma cosa succede se due utenti aggiungono un immobile contemporaneamente? Non si rischia di inserire il recapito di un immobile al posto di un altro?
    ...
    Premetto che ho utilizzato solamente una volta PostgreSQL. Il problema che ti poni è giusto. Una soluzione potrebbe essere quella di gestire da te le chiavi id inserite nella tabella IMMOBILI.
    Puoi fare questo creando una SEQUENCE. A questo punto prima di effettuare le insert puoi ricavare il successivo valore della sequence mediante la funzione nextval() ed utilizzi questo valore per effettuare sia la insert nella tabella IMMOBILI che quella nella tabella RECAPITO.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  9. #9
    Io avevo già messo entrambe le colonne come SERIAL, va bene lo stesso? Teoricamente hanno lo stesso risultato della sequenza, no?
    Ma come faccio ad estrarre il giusto id per poi inserire i dati in recapito?

  10. #10
    Da quanto ho letto (molto velocemente) mi è sembrato di capire che col SERIAL non puoi ricavare l'id successivo cosa che invece è possibile ottenere utilizzando una SEQUENCE.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

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.