• User Newbie

    Problema con una 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!

    PS: io uso Postgres, non per scelta mia, ma del prof.
    PPS: id_i è un serial. Ma mi hanno detto che sarebbe meglio dargli valore integer e poi applicarvi una sequenza. C'è qualche differenza?


  • User Newbie

    Ho provato entrambe le query e quando stampo il risultato mi esce: resource id#11
    Il che mi pare voglia dire che sto cercando di stampare o un array o un oggetto.
    Come faccio a fargli stampare esattamente quello che cerco?
    Dal momento che id_i è identificatore univoco di entrambe le tabelle non dovrebbe uscirmi un array!

    Scusate, sono stata un po' prolissa!


  • User Attivo

    @michellemabelle said:

    Ho provato entrambe le query e quando stampo il risultato mi esce: resource id#11
    Il che mi pare voglia dire che sto cercando di stampare o un array o un oggetto.
    Come faccio a fargli stampare esattamente quello che cerco?
    Dal momento che id_i è identificatore univoco di entrambe le tabelle non dovrebbe uscirmi un array!

    Scusate, sono stata un po' prolissa!

    Se l'inserimento dell'immobile e dell'indirizzo fossero conseguenti basta usare mysql_insert_id() per recuperare l'ultimo id inserito


  • User Newbie

    PS: io uso Postgres, non per scelta mia, ma del prof.

    Probabilmente c'è una funziona analoga per Postgres, ma se nello stesso momento un altro utente dovesse inserire un immobile? Rischierei di avere l'immobile con un indirizzo errato!

    Ieri sera mi è capitato di leggere tra vari forum di questa funzione:

    
    create table test_table(        id serial primary key not null);insert into test_table default values;select currval ('test_table_id_seq'::regclass);
    
    

    Potrebbe essere utile?


  • Super User

    SCusa, ma perché IMMOBILE e RECAPITO sono due tabelle diverse ? Da quando un Immobile è senza recapito ?

    M.


  • User Newbie

    Ciao,
    ho diviso IMMOBILE da RECAPITO perché se avessi fatto una sola tabella mi sarei trovata con 14 attributi


  • Super User

    E quindi ???
    Che problema hai con 14 attributi ?

    M.