PDA

View Full Version : [MySql] Perchè mi da errore quando tento questo insert


D4rkAng3l
23-05-2009, 17:33
Ciao,
ho una tabella fatta così:


+-----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+----------------+
| Id_Oggetto | int(11) | NO | PRI | NULL | auto_increment |
| Titolo | varchar(60) | NO | | NULL | |
| Descrizione | text | YES | | NULL | |
| Costo_Base | decimal(6,2) | YES | | NULL | |
| Scadenza | datetime | YES | | NULL | |
| Compralo_Subito | decimal(6,2) | YES | | NULL | |
| Id_Venditore | varchar(20) | NO | | NULL | |
| Id_Categoria | varchar(30) | NO | | NULL | |
+-----------------+--------------+------+-----+---------+----------------+


Quando tento questo insert però mi da il seguente errore:


insert into INSERZIONE values
(NULL, 'Gibson Les Paul', 'Chitarra elettrica Gibson Les Paul del 1977', 300.00, NULL, '2008-02-27', 'usato', 'Salvo', 17),
(NULL, 'Fender Stratocaster', 'Chitarra elettrica Fender Stratocaster del 1973', 300.00, 650.00, '2008-03-04', 'usato', 'Salvo', 17),
(NULL, 'Fear Of The Dark', 'Storico Album degli Iron Maiden blabla', 3.00, NULL, '2008-03-04', 'usato', 'Salvo', 15),
(NULL, 'Cofanetto Metallica', 'Tutta la discografia dei Metallica in un elegante cofanetto', 5.00, 35.00, '2008-03-04', 'nuovo', 'Lalla', 15),
(NULL, 'Cavalletto Manfrotto', 'Ottimo cavalletto Manfrotto', 10.50, 150.00, '2008-03-09', 'nuovo', 'Fotografo84', 10),
(NULL, 'Canon Eos 350D', 'Reflex Digitale', 10.00, NULL, '2008-03-12', 'usato', 'Artista77', 11),
(NULL, 'Radeon 9800 Series', 'Scheda grafica etcetc', 5.00, 75.50, '2008-03-12', 'nuovo', 'IGOR', 4),
(NULL, 'Il Signore degli Anelli', 'Storica trilogia di Tolkien etcetc', 2.00, 25.00, '2008-03-12', 'nuovo', 'IGOR', 4),
(NULL, 'Pacchetto Dylan Dog', 'Raccolta di fumetti dal numero 50 al numero 75 tutti prima edizione', 4.00, 80.00, '2008-03-12', 'nuovo', 'Plutone', 4),
(NULL, 'Photosho CS3 no problem', 'Manuale di Photoshop CS3 etcetc', 2.00, NULL, '2008-03-15', 'usato', 'Ryo', 4),
(NULL, 'Kodak CX3', 'Macchina digitale compatta etcetc', 2.00, NULL, '2008-03-15', 'usato', 'Ryo', 8),
(NULL, 'Vinile Black Sabbath', 'Storico vinile edito nel 1968', 5.00, NULL, '2008-03-17', 'usato', 'Marilu', 15),
(NULL, 'Painkiller: Vinile Judas Priest', 'Storico vinile dei Judas Priest edito nel 1991', 5.00, NULL, '2008-03-18', 'usato', 'FreeMan', 15),
(NULL, 'Fuji FinePix S5700 ', 'Ottima macchina fotografica digitale di tipo bridge balbla', 10.00, 440, '2008-03-19', 'nuovo', 'Fotografo84', 8),
(NULL, 'Kommodor 64', 'Storico computer anni 80, etcetc', 2.00, 35.00, '2008-03-15', 'usato', 'Ryo', 4),
(NULL, 'Asus - X53ke portatile', 'Ottimi computer poratile che integra tutta la potenza del processore AMD Turion 64 etcetc', 50.00, 630.00, '2008-03-19', 'nuovo', 'ComputerMagix', 4),
(NULL, 'Hp Pc portatile pavilion dv6650el', 'Notebook con schermo WXGA da 15,4", risoluzione 1280 x 80 etcetc', 70.00, 80.00, '2008-03-19', 'nuovo', 'ComputerMagix', 4),
(NULL, 'Acer Pc portatile aspire 5920 ', 'Notebook con processore intel core 2 duo', 50.00, 760.00, '2008-03-20', 'nuovo', 'ComputerMagix', 4),
(NULL, 'Olympus E-510', 'Reflex digitale di ultima generazione con sensore stabilizzato', 10.00, 630.00, '2008-03-21', 'nuovo', 'Fotografo84', 7),
(NULL, 'Sigma EF-500 DG ST TTL per Pentax', 'Flash per reflex Pentax prodotto da sigma etcetc', 7.00, NULL, '2008-03-21 17:30:00', 'nuovo', 'Fotografo84', 10);


ERROR 1136 (21S01): Column count doesn't match value count at row 1

Come mai come risolvere?

Ah dimendicavo che la tabella contiene già molti altri record al suo interno

Grazie
Andrea

gugoXX
23-05-2009, 18:17
la tabella ha 8 colonne, mentre la insert (almeno la prima) ne ha 9

D4rkAng3l
23-05-2009, 18:36
la tabella ha 8 colonne, mentre la insert (almeno la prima) ne ha 9

:muro: :muro: :muro:

Che deficiente che sono...ed ora mi sorge un altro bel problema...nella tabella manca una colonna che dice se l'oggetto a cui si riferisce l'inserzione è nuovo o usato.

La mia tabella Inserzione è piena di dati (tipo 130000 record) che ho inserito si con un programma ma comunque faticosamente perchè il programma fa inserire i record 100 a 100 e ho passato le mezzore a cliccare col mouse....tra l'altro poi la tabella inserzione è collegata con incoli di integrità referenziale ad altre tabelle e sarebbe un casino rifare tutto.

E' possibile fare questa cosa?

Modificare la tabella ed aggiungergli un campo Stato_Oggetto (che può essere o booleano (1: nuovo, 0 usato) o varchar ("nuovo", "usato")) ad ogni record già inserito e possibilmente fare in modo che questo campo assuma casualmente uno dei due valori possibili in fase di modifica della tabella...

E' possibile o si tratta di fantascienza?

Grazie
Andrea

qwerty86
23-05-2009, 18:47
Non so dirtelo con certezza ma penso di possa fare. Prova:)

Ps. se proprio ti da problemi puoi sempre crearti una nuova tabella con i campi che hai più quello che ti serve e poi la riempi con una select dalla tabella che hai ora. :)

ndakota
23-05-2009, 18:58
se fai un update senza condizione modifichi tutti i campi di una tabella..

D4rkAng3l
23-05-2009, 19:08
se fai un update senza condizione modifichi tutti i campi di una tabella..

che intendi?

ndakota
23-05-2009, 20:22
se fai


UPDATE nome_tabella SET nome_campo = valore


dovresti trovarti con tutti i campi nome_campo di tutte le righe della tabella nome_tabella con il valore valore.

D4rkAng3l
24-05-2009, 12:20
se fai


UPDATE nome_tabella SET nome_campo = valore


dovresti trovarti con tutti i campi nome_campo di tutte le righe della tabella nome_tabella con il valore valore.

eh si questo lo sò ma se valore lo volessi casuale? c'è modo?

Grazie
Andrea

ndakota
24-05-2009, 12:51
eh si questo lo sò ma se valore lo volessi casuale? c'è modo?

Grazie
Andrea

con sql non penso ma con qualche riga di php dovresti riuscirci..

gugoXX
24-05-2009, 15:22
UPDATE inserzione
SET nuovocampo =
CASE WHEN MOD(LEN(Titolo),2)=1 THEN 1 ELSE 0 END


Cosi' se il titolo ha lunghezza dispari avrai un elemento nuovo, altrimenti usato.
Abbastanza casuale direi :)

D4rkAng3l
24-05-2009, 15:55
UPDATE inserzione
SET nuovocampo =
CASE WHEN MOD(LEN(Titolo),2)=1 THEN 1 ELSE 0 END


Cosi' se il titolo ha lunghezza dispari avrai un elemento nuovo, altrimenti usato.
Abbastanza casuale direi :)

I titolo hanno tutti la stessa lunghezza mi pare perchè sono stati generati con un programma usando una maschera...però potrei usare tale tecnica per qualche altro campo che dovrebbe avere lunghezza variabile...mo provo :D

D4rkAng3l
24-05-2009, 16:13
UPDATE inserzione
SET nuovocampo =
CASE WHEN MOD(LEN(Titolo),2)=1 THEN 1 ELSE 0 END


Cosi' se il titolo ha lunghezza dispari avrai un elemento nuovo, altrimenti usato.
Abbastanza casuale direi :)

mmm ho provato a fare così ma mi dà questo messaggio di errore:


mysql> UPDATE inserzione
-> SET Stato_Oggetto enum('nuovo', 'usato') =
-> CASE WHEN MOD(LEN(Descrizione),2)= 1 THEN 'nuovo' ELSE 'usato' END;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version
for the right syntax to use near 'enum('nuovo', 'usato')
CASE WHEN MOD(LEN(Descrizione),2)=1 THEN 'nuovo' ELSE 'us' at line 2
mysql>


Cosa sbaglio? Please è importante :muro:

Grazie
Andrea

D4rkAng3l
24-05-2009, 17:36
Risolto creando un campo con ALTER TABLE e poi
UPDATE inserzione SET Stato_Oggetto = CASE WHEN(RAND() > 0.5) THEN 'nuovo' ELSE 'usato' END;

:D :D :D :ciapet: