webForumDet fria alternativet

Uppdatera ospecificerat fält

Databaser & SQL

4 svar · 579 visningar · startad av noratx

Medlem sedan feb. 200193 inlägg
Frågan#1

Hej!

Har kört fast om är osäker på hur jag ska göra, hoppas någon har tid att guida mig mot ett svar.

Jag har en tabell med 22 fält: ID, Bot, OP1 - OP20
Just nu ser tabellen ut som följande:
Tabell "ops"
ID = 1
BOT = Midday
OP1 = Tad
OP2 = Sher
OP3 - OP20 = NONE

Vad jag skulle vilja uppnå är att kunna uppdatera första bästa "NONE", mot angiven variabel..
exempelvis "UPDATE ops SET 'Lisa' WHERE (första möjliga OP#) = 'NONE'"

Är detta möjligt? I så fall, hur? :)

Medlem sedan dec. 200012 464 inlägg
#2

Klart det är möjligt men det är varken effektivt eller enkelt. Ändra din datamodell så att i stället för att ha 20 kolumner så lagrar du så många rader som du behöver i en separat tabell.

Medlem sedan feb. 200193 inlägg
#3

LarsG skrev:

Klart det är möjligt men det är varken effektivt eller enkelt. Ändra din datamodell så att i stället för att ha 20 kolumner så lagrar du så många rader som du behöver i en separat tabell.

Det var faktiskt min första tanke, men dessvärre inte helt lätt heller pga. relationerna.

Jag har 5 tabeller:
Bots, Masters, ops, logs, _lock

Bots.botname har relationer i alla andra tabeller med X.botname

Vet inte hur jag skulle göra på ett annat sätt och fortfarande kunna ha de relationerna.

Men.. hmm.. "NONE" är ju standardvärde på fälten.. kanske om jag ställde in så att standard för Op3 = "Op3", Op4 = "Op4" osv.. *kliar sig i huvudet*
Tack :)

Medlem sedan aug. 20039 340 inlägg
#4

Fast det bör vara lätt att komma runt med två join. Först en join för att relatera den första tabellen mot ops, sedan en andra join för att hämta in OP1 - OPn. Din nuvarande struktur är dålig av flera anledningar; problemet du står inför nu är en.

Medlem sedan feb. 200193 inlägg
#5

nitro2k01 skrev:

Fast det bör vara lätt att komma runt med två join. Först en join för att relatera den första tabellen mot ops, sedan en andra join för att hämta in OP1 - OPn. Din nuvarande struktur är dålig av flera anledningar; problemet du står inför nu är en.

I guess so, jag har på tok för dåliga kunskaper för att kunna designa en databas på ett bra och effektivt sätt...
Alla mina tabeller ser ut på samma sätt.
Dock är Bots, Logs och _Lock relativt statiska...
Ie. Bots kommer aldrig ändras annat än manuellt av mig.
Logs: Kommer enbart att lagras i, i stort sätt aldrig hämtas ifrån, och framförallt aldrig ändras i.
_Lock: Innehåller bara 2 fält.. Bot_Name och en timestamp. Timestamp hämtas, kontrolleras och raderas om timestampen är äldre än 25 minuter.

Har ni några förslag på bättre struktur på Masters och ops?

Nuvarande struktur är följande;

Masters;
+----------+-------------+-------------------+------+-----+---------+----------------+---------------------------------+---------+
| Field    | Type        | Collation         | Null | Key | Default | Extra          | Privileges                      | Comment |
+----------+-------------+-------------------+------+-----+---------+----------------+---------------------------------+---------+
| ID       | int(10)     | NULL              | NO   | PRI | NULL    | auto_increment | select,insert,update,references |         |
| Bot_Name | varchar(65) | latin1_swedish_ci | NO   | UNI | NULL    |                | select,insert,update,references |         |
| Owner    | varchar(65) | latin1_swedish_ci | NO   |     | NULL    |                | select,insert,update,references |         |
| M1       | varchar(65) | latin1_swedish_ci | NO   |     | M1    |                | select,insert,update,references |         |
| M2       | varchar(65) | latin1_swedish_ci | NO   |     | M2    |                | select,insert,update,references |         |
| M3       | varchar(65) | latin1_swedish_ci | NO   |     | M3    |                | select,insert,update,references |         |
| M4       | varchar(65) | latin1_swedish_ci | NO   |     | M4    |                | select,insert,update,references |         |
| M5       | varchar(65) | latin1_swedish_ci | NO   |     | M5    |                | select,insert,update,references |         |
+----------+-------------+-------------------+------+-----+---------+----------------+---------------------------------+---------+

Ops:
+----------+-------------+-------------------+------+-----+---------+----------------+---------------------------------+---------+
| Field    | Type        | Collation         | Null | Key | Default | Extra          | Privileges                      | Comment |
+----------+-------------+-------------------+------+-----+---------+----------------+---------------------------------+---------+
| ID       | int(10)     | NULL              | NO   | PRI | NULL    | auto_increment | select,insert,update,references |         |
| Bot_Name | varchar(65) | latin1_swedish_ci | NO   | UNI | NULL    |                | select,insert,update,references |         |
| Op1      | varchar(65) | latin1_swedish_ci | NO   |     | Op1     |                | select,insert,update,references |         |
| Op2      | varchar(65) | latin1_swedish_ci | NO   |     | Op2     |                | select,insert,update,references |         |
| Op3      | varchar(65) | latin1_swedish_ci | NO   |     | Op3     |                | select,insert,update,references |         |
| Op4      | varchar(65) | latin1_swedish_ci | NO   |     | Op4     |                | select,insert,update,references |         |
| Op5      | varchar(65) | latin1_swedish_ci | NO   |     | Op5     |                | select,insert,update,references |         |
| Op6      | varchar(65) | latin1_swedish_ci | NO   |     | Op6     |                | select,insert,update,references |         |
| Op7      | varchar(65) | latin1_swedish_ci | NO   |     | Op7     |                | select,insert,update,references |         |
| Op8      | varchar(65) | latin1_swedish_ci | NO   |     | Op8     |                | select,insert,update,references |         |
| Op9      | varchar(65) | latin1_swedish_ci | NO   |     | Op9     |                | select,insert,update,references |         |
| Op10     | varchar(65) | latin1_swedish_ci | NO   |     | Op10    |                | select,insert,update,references |         |
| Op11     | varchar(65) | latin1_swedish_ci | NO   |     | Op11    |                | select,insert,update,references |         |
| Op12     | varchar(65) | latin1_swedish_ci | NO   |     | Op12    |                | select,insert,update,references |         |
| Op13     | varchar(65) | latin1_swedish_ci | NO   |     | Op13    |                | select,insert,update,references |         |
| Op14     | varchar(65) | latin1_swedish_ci | NO   |     | Op14    |                | select,insert,update,references |         |
| Op15     | varchar(65) | latin1_swedish_ci | NO   |     | Op15    |                | select,insert,update,references |         |
| Op16     | varchar(65) | latin1_swedish_ci | NO   |     | Op16    |                | select,insert,update,references |         |
| Op17     | varchar(65) | latin1_swedish_ci | NO   |     | Op17    |                | select,insert,update,references |         |
| Op18     | varchar(65) | latin1_swedish_ci | NO   |     | Op18    |                | select,insert,update,references |         |
| Op19     | varchar(65) | latin1_swedish_ci | NO   |     | Op19    |                | select,insert,update,references |         |
| Op20     | varchar(65) | latin1_swedish_ci | NO   |     | Op20    |                | select,insert,update,references |         |
+----------+-------------+-------------------+------+-----+---------+----------------+---------------------------------+---------+
270 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
138 ms — ändringar (db)