Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Problema creazione tabella

    Salve a tutti. E' la prima volta che sto utilizzando comandi speciali come CHECK e FOREIGN KEY.

    Questo è il frammento di codice interessato:
    Codice PHP:

    ...

    $create_affari "CREATE TABLE affari (" .
                
    "cod_cliente INT(11) NOT NULL, " .
                
    "cod_immobile INT(11) NOT NULL, " .
                
    "tipo CHAR(7) NOT NULL, " .
                
    "affitto VARCHAR(11) NOT NULL, " .
                
    "CHECK (tipo = 'vendita' OR tipo = 'affitto'), " .
                
    "CHECK (affitto = 'settimanale' OR affitto = 'mensile' OR affitto = 'annuale'), " .
                
    "FOREIGN KEY(cod_cliente) REFERENCES clienti(cod_cliente) ON DELETE CASCADE, " .
                
    "FOREIGN KEY(cod_immobile) REFERENCES immobili(cod_immobile) ON DELETE CASCADE) TYPE=InnoDB";
    mysql_query ($create_affari)
    or die (
    mysql_error());

    ... 
    Ma quando tento di eseguirlo, ecco il messaggio di errore: http://localhost/AgenziaImmobiliare/db/create.php

    Cosa devo fare? o_O

  2. #2
    Ciao,

    Innanzitutto la pagina di errore non possiamo vederla perchè hai messo un link al tuo server locale.

    La sintassi di CHECK è sbagliata. Se non ricordo male, nel tuo caso dovrebbe essere:
    codice:
    tipo CHAR(7) CHECK (tipo = 'vendita' OR tipo = 'affitto')
    Comunque ENUM sarebbe meglio:
    codice:
    tipo ENUM ('vendita', 'affitto'),
    Per le FOREIGN KEY dai un'occhiata al manuale devono verificarsi alcune condizioni per poterle usare.

    Alessandro
    Full Stack Developer presso Advice Lab
    Bonus Bitcoin
    Moon Bitcoin

  3. #3
    Scusa ho sbagliato ad incollare per la fretta, ecco il messaggio di errore: "Can't create table 'agenzia_immobiliare.affari' (errno: 150)"

    Ora provo a modificare

  4. #4
    Allora, ho provato così ma da lo stesso errore:

    Codice PHP:
    $create_affari "CREATE TABLE affari (" .
                
    "cod_cliente INT(11) NOT NULL, " .
                
    "cod_immobile INT(11) NOT NULL, " .
                
    "tipo CHAR(7) CHECK (tipo = 'vendita' OR tipo = 'affitto'), " .
                
    "affitto VARCHAR(11) CHECK (affitto = 'settimanale' OR affitto = 'mensile' OR affitto = 'annuale'), " .
                
    "FOREIGN KEY(cod_cliente) REFERENCES clienti(cod_cliente) ON DELETE CASCADE, " .
                
    "FOREIGN KEY(cod_immobile) REFERENCES immobili(cod_immobile) ON DELETE CASCADE) TYPE=InnoDB";
    mysql_query ($create_affari)
    or die (
    mysql_error()); 
    Le foreign key mi sembra di averle impostate bene.

  5. #5
    Le tabelle clienti ed immobili le hai già create? Sono InnoDB?
    I campi si chiamano rispettivamente clienti.cod_cliente e immobili.cod_cliente oppure sono clienti.id e immobili.id?

    Non mi viene in mente altro da farti controllare.
    Full Stack Developer presso Advice Lab
    Bonus Bitcoin
    Moon Bitcoin

  6. #6
    Originariamente inviato da Magicale
    Le tabelle clienti ed immobili le hai già create? Sono InnoDB?
    I campi si chiamano rispettivamente clienti.cod_cliente e immobili.cod_cliente oppure sono clienti.id e immobili.id?

    Non mi viene in mente altro da farti controllare.
    Certo, le altre tabelle sono già create e ho controllato già il nome delle chiavi esterne...

  7. #7
    Ho fatto una prova creando due tabelle con nome clienti e immobili, con i soli campi clienti.cod_cliente e immobili.cod_cliente.
    La terza query che crea la tabella affari mi funziona correttamente.

    Un altro dubbio che mi è venuto:
    clienti.cod_cliente
    immobili.cod_cliente
    Sono impostate come chiavi o indici?

    Dopo questa ho esaurito le mie conoscenze in materia di FOREIGN KEYs
    Full Stack Developer presso Advice Lab
    Bonus Bitcoin
    Moon Bitcoin

  8. #8
    Allora, ora vi posto il codice completo:

    Codice PHP:
    <?php

    include ("connection.php");

    $create_clienti "CREATE TABLE clienti (" .
                
    "cod_cliente INT(11) UNSIGNED NOT NULL AUTO_INCREMENT," .
                
    "cod_fiscale CHAR(16) NOT NULL, " .
                
    "nome VARCHAR(15) NOT NULL, " .
                
    "cognome VARCHAR(15) NOT NULL, " .
                
    "indirizzo VARCHAR(20) NOT NULL, " .
                
    "citta VARCHAR(20) NOT NULL, " .
                
    "provincia CHAR(2) NOT NULL, " .
                
    "tel VARCHAR(15) NOT NULL, " .
                
    "PRIMARY KEY(cod_cliente)) TYPE=InnoDB";
    mysql_query ($create_clienti$db)
    or die (
    mysql_error());

    $create_immobili "CREATE TABLE immobili (" .
                
    "cod_immobile INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, " .
                
    "superfice INT(6) NOT NULL, " .
                
    "prezzo INT(8) NOT NULL, " .
                
    "data_costruzione VARCHAR(10) NOT NULL, " .
                
    "indirizzo VARCHAR(20) NOT NULL, " .
                
    "citta VARCHAR(20) NOT NULL, " .
                
    "provincia VARCHAR(2) NOT NULL, " .
                
    "tipo VARCHAR(20) NOT NULL, " .
                
    "descrizione VARCHAR(200) NOT NULL, " .
                
    "PRIMARY KEY(cod_immobile)) TYPE=InnoDB";
    mysql_query ($create_immobili$db)
    or die (
    mysql_error());

    $create_affari "CREATE TABLE affari (" .
                
    "cod_cliente INT(11) NOT NULL, " .
                
    "cod_immobile INT(11) NOT NULL, " .
                
    "tipo CHAR(7) CHECK (tipo = 'vendita' OR tipo = 'affitto'), " .
                
    "affitto VARCHAR(11) CHECK (affitto = 'settimanale' OR affitto = 'mensile' OR affitto = 'annuale'), " .
                
    "FOREIGN KEY(cod_cliente) REFERENCES clienti(cod_cliente) ON DELETE CASCADE, " .
                
    "FOREIGN KEY(cod_immobile) REFERENCES immobili(cod_immobile) ON DELETE CASCADE) TYPE=InnoDB";
    mysql_query ($create_affari)
    or die (
    mysql_error());

    mysql_close ($db);

    ?>

  9. #9
    Ecco l'errore
    I campi di cod_cliente e cod_immobile devono essere dello stesso tipo di quelli delle due tabelle clienti e immobili, ovvero anch'essi UNSIGNED.
    Non conoscendo la struttura delle altre tabelle, non avevo pensato a questo

    Codice PHP:
    $create_affari "CREATE TABLE affari (" 
                
    "cod_cliente INT(11) UNSIGNED NOT NULL, " 
                
    "cod_immobile INT(11) UNSIGNED NOT NULL, " 
                
    "tipo CHAR(7) CHECK (tipo = 'vendita' OR tipo = 'affitto'), " 
                
    "affitto VARCHAR(11) CHECK (affitto = 'settimanale' OR affitto = 'mensile' OR affitto = 'annuale'), " 
                
    "FOREIGN KEY(cod_cliente) REFERENCES clienti(cod_cliente) ON DELETE CASCADE, " 
                
    "FOREIGN KEY(cod_immobile) REFERENCES immobili(cod_immobile) ON DELETE CASCADE) TYPE=InnoDB"
    Alessandro
    Full Stack Developer presso Advice Lab
    Bonus Bitcoin
    Moon Bitcoin

  10. #10
    Originariamente inviato da Magicale
    Ecco l'errore
    I campi di cod_cliente e cod_immobile devono essere dello stesso tipo di quelli delle due tabelle clienti e immobili, ovvero anch'essi UNSIGNED.
    Non conoscendo la struttura delle altre tabelle, non avevo pensato a questo

    Codice PHP:
    $create_affari "CREATE TABLE affari (" 
                
    "cod_cliente INT(11) UNSIGNED NOT NULL, " 
                
    "cod_immobile INT(11) UNSIGNED NOT NULL, " 
                
    "tipo CHAR(7) CHECK (tipo = 'vendita' OR tipo = 'affitto'), " 
                
    "affitto VARCHAR(11) CHECK (affitto = 'settimanale' OR affitto = 'mensile' OR affitto = 'annuale'), " 
                
    "FOREIGN KEY(cod_cliente) REFERENCES clienti(cod_cliente) ON DELETE CASCADE, " 
                
    "FOREIGN KEY(cod_immobile) REFERENCES immobili(cod_immobile) ON DELETE CASCADE) TYPE=InnoDB"
    Alessandro
    Grazie mille funziona

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.