webForumDet fria alternativet

Fundering ang mysql

8 svar · 569 visningar · startad av saw

sawMedlem sedan mars 20011 880 inlägg
#1

Finns det ett defaultvärde som man kan sätta in i en tabell i mysql?
Orsak till frågan:
I tabellen t_quick_quize finns följande fält:
id, quize
i tabellen t_answer finns följande fält:
a_id(räknare),
id(skall vara samma id som id i tabellen t_quick_quize,
vyes,vno, vdontknow(alla är int).

När jag lägger in en ny fråga i t_quick_quize och sedan skall visa upp det, så flir det fel om inte fälten vyes,vno, vdontknow har några värden.

Min lösning är, om man kan lägga in ett defaultvärde i de tre fälten (t ex 1).
Plan b är att göra en insert, kan man isåfall göra denna insert i ett steg?
Jag har läst om LAST_INSERT_ID() men jag är osäker på hur jag skall kunna använda den i detta fallet.

Tacksam för tips. :stud

@ndersMedlem sedan juni 200032 969 inlägg
#2

Du kan sätta defaultvärden i fälten. Vad är problemet?

sawMedlem sedan mars 20011 880 inlägg
#3

Hej @nders, jo om jag inte har några värden i välten så fördärvas applikationen. Hur sätter jag in defaultvärden?
Jag sitter just nu i phpMyAdmin men jag hittar inte var jag skall kunna sätta in det, kanske fel applikation?

sawMedlem sedan mars 20011 880 inlägg
#4

Jag trar att jag hittade det, i MySql Administrator..

@ndersMedlem sedan juni 200032 969 inlägg
#5

Det ska helt klart gå att göra i phpmyadmin också.

sawMedlem sedan mars 20011 880 inlägg
#6

Ojojoj.
Nu visar det sig att jag inte har tänkt helt klart.

//min insert i  t_quick_quize 
INSERT INTO t_quick_quize (quize) VALUES (@quize)
//här måste jag få tag på det id som skapas för att göra en insert i t_answer 
INSERT INTO t_answer (id) VALUES ( ?)<---här skall ju id:t in

Då kommer två frågor:

  1. hur får jag lätast fram det id som skapas i t_quick_quize ?
  2. kan jag köra detta i samma sql?

om jag inte gör detta kommer problemen när jag kör

 sql = "SELECT 
t_answer.a_id, 
t_quick_quize.id, 
t_answer.vyes, 
t_answer.vno, 
t_answer.vdontKnow, 
t_quick_quize.Quize " +
"FROM 
t_answer 
INNER JOIN 
t_quick_quize 
ON 
t_answer.id = t_quick_quize.Id 
WHERE t_quick_quize.id=@id";
@ndersMedlem sedan juni 200032 969 inlägg
#7
  1. Antingen i php med mysql_insert_id() eller direkt i SQL med last_insert_id().
  2. Borde gå - men det beror säkert på vilken version av MySQL man använder - åtminstone vet jag att det har varit problem i tidigare versioner. Googla lite på "MySQL multiple query execution" eller liknande.

mvh

sawMedlem sedan mars 20011 880 inlägg
#8

Japp nu har det lyckats.
Jag visar det här ifall någon annan undra.
Koden är kanske inte den mest optimala men den fungerar

int newID = 0;
                sql = "INSERT INTO t_quick_quize (quize) VALUES
 (@quize);SELECT id FROM t_quick_quize WHERE id=last_insert_id()";
                MySqlCommand cmd = new MySqlCommand(sql, DBConn);
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.AddWithValue("@quize", txtInfo.Text);
                DBConn.Open();
                MySqlDataReader rdr = cmd.ExecuteReader();
                while (rdr.Read())
                {
                    newID =Convert.ToInt32(rdr["id"].ToString());
                }
                DBConn.Close();
                Lifo.Text = newID.ToString();
                sql = " INSERT INTO t_answer( id ) VALUES ( @id)";
                cmd = new MySqlCommand(sql, DBConn);
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.AddWithValue("@id", newID);
                DBConn.Open();
                cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
@ndersMedlem sedan juni 200032 969 inlägg
#9

Just det, jag glömde att du inte använde php. :)

Bra att du visade din lösning! (y)

126 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)