Tabella con più valori per campi | Tips & Tricks

Topic: Pubblico - Composto da 56 Posts di 3 Utenti.

18 Marzo, 2011 12:21 #1
root1
Utente

root1
Registrato: Mar, 2011
Posts: 31
Offline

Salve a tutti .. bellissimo forum !!!! Sto muovendo i primi passi nel mondo di MYSql .. però non riesco a fare un punto di un esercizio ..

Dopo aver creato una tabella con i campi moltiplicatore, moltiplicando e prodotto ( e questo è fatto ) .. bisogna Riempire le colonne moltiplicatore e moltiplicando, in modo che siano presenti tutte le possibi coppie di numeri tra 0 e 100 ( es. 1*1 ; 1*2 ... fino a 0*100 e così per tutti gli altri numeri da 1 a 100 ) ... aiuto!!!!

18 Marzo, 2011 13:35 #2
re-verse
Moderatore

re-verse
Registrato: Jul, 2008
Posts: 312
Offline

Ciao root1, benvenuto su MySQL Italia :)
riguardo alla tua domanda, mi chiedevo se è una cosa che devi fare tramite linguaggio di programmazione (c++, php, asp, java, ecc...) o se devi farla tramite stored procedure MySQL?


Salvatore DC

La mente è come un paracadute: funziona solo se si apre. A.Einstein.

18 Marzo, 2011 13:36 #3
john_revelator
Moderatore

john_revelator
Registrato: Jun, 2009
Posts: 270
Offline

Ciao e benvenuto. Ti basta un banale cross join.

1select t1.i,t2.i
2from tab as t1
3cross join tab as t2

edit.

 1mysql> create table tab (i tinyint) engine = myisam;
 2Query OK, 0 rows affected (0.01 sec)
 3
 4mysql> insert into tab values (0),(1),(2),(3),(4),(5);
 5Query OK, 6 rows affected (0.00 sec)
 6Records: 6  Duplicates: 0  Warnings: 0
 7
 8mysql> select t1.i,t2.i from tab as t1 cross join tab as t2
 9+------+------+
10| i    | i    |
11+------+------+
12|    0 |    0 |
13|    1 |    0 |
14|    2 |    0 |
15|    3 |    0 |
16|    4 |    0 |
17|    5 |    0 |
18|    0 |    1 |
19|    1 |    1 |
20|    2 |    1 |
21|    3 |    1 |
22|    4 |    1 |
23|    5 |    1 |
24|    0 |    2 |
25|    1 |    2 |
26|    2 |    2 |
27|    3 |    2 |
28|    4 |    2 |
29|    5 |    2 |
30|    0 |    3 |
31|    1 |    3 |
32|    2 |    3 |
33|    3 |    3 |
34|    4 |    3 |
35|    5 |    3 |
36|    0 |    4 |
37|    1 |    4 |
38|    2 |    4 |
39|    3 |    4 |
40|    4 |    4 |
41|    5 |    4 |
42|    0 |    5 |
43|    1 |    5 |
44|    2 |    5 |
45|    3 |    5 |
46|    4 |    5 |
47|    5 |    5 |
48+------+------+
4936 rows in set (0.00 sec)

Ultima modifica 18 Marzo, 2011 13:41 di john_revelator


No PVT tecnici. Non rispondo nemmeno. Usate il forum.
My SO profile

19 Marzo, 2011 08:33 #4
root1
Utente

root1
Registrato: Mar, 2011
Posts: 31
Offline

re-verse: Ciao root1, benvenuto su MySQL Italia :)
riguardo alla tua domanda, mi chiedevo se è una cosa che devi fare tramite linguaggio di programmazione (c++, php, asp, java, ecc...) o se devi farla tramite stored procedure MySQL?

l'esercizio lo devo sviluppare tramite lo stored procedure MySql.

John revelator io intendevo tipo tabella pitagorica

Your text to link here...

Ultima modifica 19 Marzo, 2011 08:53 di root1

19 Marzo, 2011 10:40 #5
john_revelator
Moderatore

john_revelator
Registrato: Jun, 2009
Posts: 270
Offline

A me non costa niente postarti la soluzione bella e pronta ma penso che sia nel tuo interesse metterci del tuo.
Posta quanto fatto finora, dove hai difficoltà e poi ti aiuto volentieri.


No PVT tecnici. Non rispondo nemmeno. Usate il forum.
My SO profile

19 Marzo, 2011 10:56 #6
root1
Utente

root1
Registrato: Mar, 2011
Posts: 31
Offline

Grazie john .... Allora ....
Per prima cosa ho creato la tabella con i tre campi interi( moltiplicatore, moltiplicando e prodotto ) con il seguente comando : CREATE TABLE compito_uno ( moltiplicatore INT PRIMARY KEY,moltiplicando INT,prodotto INT );

Successivamente l'esercizio chiedeva di riempire le due colonne moltiplicando e moltiplicatore In modo che siano presenti tutte le possibili coppie tra zero e cento ( come in una normale tabella pitagorica)... qui iniziano i guai ... HO provato a fare così :

ALTER TABLE compito_uno CHANGE mpltiplicatore moltiplicatore INT AUTO_INCREMENT x poter incrementare questa colonna ma non so se ho sbagliato e nn so come andare avanti nel compito

19 Marzo, 2011 11:01 #7
john_revelator
Moderatore

john_revelator
Registrato: Jun, 2009
Posts: 270
Offline

Mah, io molto banalmente l'ho risolta così

 1delimiter //
 2drop procedure if exists pitagora//
 3create procedure pitagora()
 4begin
 5declare i tinyint default 1;
 6declare j tinyint default 2;
 7declare sSQL varchar(200) default 'select i,';
 8drop temporary table if exists t;
 9create temporary table t(i tinyint); 
10while i<=10 do
11insert into t values (i);
12set i = i + 1;
13end while;
14while j <= 10 do
15set sSQL = concat(sSQL,'i*',j,',');
16set j = j + 1;
17end while;
18set sSQL = substring(sSQL,1,char_length(sSQL) - 1);
19set @sSQL = concat(sSQL,' from t;');
20prepare stmt from @sSQL;
21execute stmt;
22deallocate prepare stmt;
23end; //
24delimiter ;
25call pitagora();

Risultato:

 1+------+------+------+------+------+------+------+------+------+------+
 2| i    | i*2  | i*3  | i*4  | i*5  | i*6  | i*7  | i*8  | i*9  | i*10 |
 3+------+------+------+------+------+------+------+------+------+------+
 4|    1 |    2 |    3 |    4 |    5 |    6 |    7 |    8 |    9 |   10 |
 5|    2 |    4 |    6 |    8 |   10 |   12 |   14 |   16 |   18 |   20 |
 6|    3 |    6 |    9 |   12 |   15 |   18 |   21 |   24 |   27 |   30 |
 7|    4 |    8 |   12 |   16 |   20 |   24 |   28 |   32 |   36 |   40 |
 8|    5 |   10 |   15 |   20 |   25 |   30 |   35 |   40 |   45 |   50 |
 9|    6 |   12 |   18 |   24 |   30 |   36 |   42 |   48 |   54 |   60 |
10|    7 |   14 |   21 |   28 |   35 |   42 |   49 |   56 |   63 |   70 |
11|    8 |   16 |   24 |   32 |   40 |   48 |   56 |   64 |   72 |   80 |
12|    9 |   18 |   27 |   36 |   45 |   54 |   63 |   72 |   81 |   90 |
13|   10 |   20 |   30 |   40 |   50 |   60 |   70 |   80 |   90 |  100 |
14+------+------+------+------+------+------+------+------+------+------+
1510 rows in set (0.01 sec)


No PVT tecnici. Non rispondo nemmeno. Usate il forum.
My SO profile

19 Marzo, 2011 11:15 #8
root1
Utente

root1
Registrato: Mar, 2011
Posts: 31
Offline

John quello che hai chiamato con "i" lo posso sostituire con moltiplicando e moltiplicatore ? E poi come posso mostrare il prodotto di ogni singola o
Moltiplicazione visto che ho creato anche una colonna prodotto in modo che per ogni riga sia il prodotto del moltiplicatore e del moltiplicando ?

19 Marzo, 2011 11:20 #9
john_revelator
Moderatore

john_revelator
Registrato: Jun, 2009
Posts: 270
Offline

La logica della mia sp è semplicissima.
Creo una tabella temporanea che popolo con i valori (i) da 1 a 10.
Nel secondo ciclo while che va da 2 a 10, genero dinamicamente la stringa di tutte le altre colonne moltiplicando il valore i per il valore corrente di j all'interno del ciclo while.
Una volta generata la stringa la passo alla prepared statement affinchè la possa eseguire.

Sinceramente non mi è molto chiara la logica che invece stai seguendo tu o che ti hanno imposto di seguire. Al limite posta il dump della tua tabella e vedo se ci capisco qualcosa.


No PVT tecnici. Non rispondo nemmeno. Usate il forum.
My SO profile

19 Marzo, 2011 11:45 #10
root1
Utente

root1
Registrato: Mar, 2011
Posts: 31
Offline

quello che intendo io è che quando vado a inserire 3 con AUTO_INCREMENT nella colonna moltiplicatore nella colonna moltiplicando possa inserire dopo per esempio 2 .. 3 sempre riferito al numero tre ..

Ultima modifica 19 Marzo, 2011 11:51 di root1

Condividi su:

Loggati o Registrati per replicare