Kom ihåg mig?
Home Menu

Menu


Ändra i flera tabeller på samma gång

Ämnesverktyg Visningsalternativ
Oläst 2006-07-07, 14:10 #1
JonasOs avatar
JonasO JonasO är inte uppkopplad
Medlem
 
Reg.datum: Dec 2003
Inlägg: 203
JonasO JonasO är inte uppkopplad
Medlem
JonasOs avatar
 
Reg.datum: Dec 2003
Inlägg: 203
Tjena!

Jag har ett litet databasproblem som jag inte kan lösa. I en databas har jag 20 olika installationer av samma programvara. Varje installation består av 10 olika tables med exakt likadan uppbyggnad. Om jag ska uppdatera ett fält i en installation kan jag använda nedanstående kod som funkar bra (obs värden ändrade i exemplet):

UPDATE `Installationnr1` SET `option_value` = 'NYTT VÄRDE' WHERE `option_id` =42 AND `program_id` =0 AND CONVERT( `option_name` USING utf8 ) = 'namn_på_fält' LIMIT 1 ;

Så... hur gör jag för att köra denna koden så att den ändrar exakt samma fält fast i alla mina installationer på samma gång? Jag är ingen expert på databaser men jag läste i denna post men fattar inte ändå...

http://www.webmasternetwork.se/index.php?a...&hl=update&s=wn


Trevlig helg!
Mvh Jonas
JonasO är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-07-07, 14:28 #2
Blackexs avatar
Blackex Blackex är inte uppkopplad
Medlem
 
Reg.datum: Jun 2006
Inlägg: 238
Blackex Blackex är inte uppkopplad
Medlem
Blackexs avatar
 
Reg.datum: Jun 2006
Inlägg: 238
Citat:
I en databas har jag 20 olika installationer av samma programvara.
Hur menar du? Det går inte att installera programvara i en databas... Vilken databas använder du?

Citat:
Varje installation består av 10 olika tables med exakt likadan uppbyggnad.
Du kan inte ha tabeller i en programvaru installation. Jag antar att du menar att du har de tio tabellerna i databasen du nämnde. Varför har du tio likadana tabeller där? Det räcker väl med en?

Trots ovanstående frågetecken så låter det troligt att du kan lösa ditt problem med en loop:

Kod:
<?php
for($i=1;$i<=10;$i++) {
  $sql = "UPDATE `Installationnr$i` ...";
}
?>
Du kan även använda dig av transaktioner för att säkerställa att alla UPDATES blir genomförda utan problem.
Blackex är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-07-07, 14:32 #3
JonasOs avatar
JonasO JonasO är inte uppkopplad
Medlem
 
Reg.datum: Dec 2003
Inlägg: 203
JonasO JonasO är inte uppkopplad
Medlem
JonasOs avatar
 
Reg.datum: Dec 2003
Inlägg: 203
Tjena...

Well, det är bloggar.. varje installation är 10 tabeller... så i alla mina bloggar vill jag kunna ändra ett speciellt fält på enklast möjliga sätt.

Grejen är att varje installation har automatiskt genererade namn på tables så jag vet inte namnen på dom, utan jag vill ändra alla som finns i databasen.

Mvh Jonas
JonasO är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-07-07, 15:00 #4
zorans avatar
zoran zoran är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2004
Inlägg: 598
zoran zoran är inte uppkopplad
Mycket flitig postare
zorans avatar
 
Reg.datum: Jun 2004
Inlägg: 598
Citat:
Originally posted by JonasO@Jul 7 2006, 13:32
Tjena...

Well, det är bloggar.. varje installation är 10 tabeller... så i alla mina bloggar vill jag kunna ändra ett speciellt fält på enklast möjliga sätt.

Grejen är att varje installation har automatiskt genererade namn på tables så jag vet inte namnen på dom, utan jag vill ändra alla som finns i databasen.

Mvh Jonas
Alltså på NÅGOT sätt måste ändå applikationen veta vilka tabeller som används. Då måste du på NÅGOT sätt kunna extrahera den informationen för att kunna använda i ett potentiellt skript.
zoran är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-07-07, 21:53 #5
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
JonasO: Om du ska få några bra svar din fråga så uttryck dig klart att man förstår vad du menar. Vad är det för applikation, vad menar du med en installation? Vadå för "programvara", vad används för tekniker? Vilken databas pratar vi om? ...MySQL, php, ...

Med lite klarhet kan du få bra svar här, men om du inte riktigt har klart för dig vad du frågar så blir det svårt att ge några bra svar.
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-07-08, 10:57 #6
JonasOs avatar
JonasO JonasO är inte uppkopplad
Medlem
 
Reg.datum: Dec 2003
Inlägg: 203
JonasO JonasO är inte uppkopplad
Medlem
JonasOs avatar
 
Reg.datum: Dec 2003
Inlägg: 203
Tja

Jag kanske var litekortfattad förut men så här ligger det iaf till:

1. Jag kör XXXX antal installationer av ett bloggscript. Alla bloggar ligger i samma databas men i olika tabeller efter följade princip.


YYYYYY = 6 bokstäver som är automatisk genererade typ ewt345 eller kanske 34df4d, med andra ord jag har inte en susning egentligen men de ligger i samma databas efter nedanstående princip.
------------------------

YYYYYYY_namn //Blogg1
YYYYYYY_index //Blogg1
YYYYYYY_extra //Blogg1
YYYYYYY_ping //Blogg1
.
.
.
osv

YYYYYYY_namn //Blogg2
YYYYYYY_index //Blogg2
YYYYYYY_extra //Blogg2
YYYYYYY_ping //Blogg2
.
.
.
osv

YYYYYYY_namn //Blogg3
YYYYYYY_index //Blogg3
YYYYYYY_extra //Blogg3
YYYYYYY_ping //Blogg3
.
.
.
osv


Tänk att jag har XXXX antal bloggar i samma databas och sen vill jag ändra ett fält i tex alla "blogping" fält som ligger i alla tabeller som heter YYYYYYY_ping. Dvs det finns ett fält per installation och har jag XXXX installationer blir det ganska många.

Det jag behöver är alltså någon slags kod som söker igenom alla mina tabeller i en databas efter fältet "blogping" och sedan ändrar värdet där. Det kan väl inte vara så svårt tycker jag, det är ingen Rocket Science direkt. Jag kan ju tex ladda hem hela databasen och söka igenom och ändra det jag vill med tex en vanlig texteditor - dock kanske det inte är det optimala precis men det fungerar B)... lite jobbigt bara när databasen blir allt för stor..

Well, jag använder ett antal Linux servrar som har MySQL - 4.1.19-standard eller nyare.

Om någon knåpar ihop ett litet php-script som fixar detta så betalar jag för tiden å 700:- exkl moms. (borde väl bara bli en timme)

Det finns en hel del info på dev.mysql.com men jag kan liksom inte få ihop det i ett php script el liknande...


Trevlig helg!
Jonas
JonasO är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-07-08, 14:47 #7
WizKid WizKid är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2004
Inlägg: 618
WizKid WizKid är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2004
Inlägg: 618
Detta borde fungera. Helt otestat men det känns som det fungerar


Söker upp alla tabeller som slutar på "_ping"
Kod:
$sqlResult = mysql_query ("SHOW TABLES LIKE '%_ping'") or die (mysql_error());
if (mysql_num_rows ($sqlResult))
{
 while ($row = mysql_fetch_row($sqlResult))
 {
   // Nu kommer $row[0] innehålla hela tabell namnet.
   // Kan tex göra
   mysql_query ("UPDATE $row[0] SET count = count +1");
 }
}
WizKid är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-07-08, 14:58 #8
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
Okej. Det var ju en bättre förklaring. Nej nån Rocket Science är det ju inte direkt...

Vad du behöver göra är att använda SHOW eller DESCRIBE t ex:

SHOW TABLES FROM en_databas; #visa alla tabeller i en databas
SHOW FIELDS FROM en_tabell LIKE '%\_ping'; #ger alla columner i en tabell som slutar på _ping
(Använder inte SHOW direkt dagligen men ovan borde fungera för att få reda på vad du behöver veta, titta annars i MySQL dokumentationen)

sedan kan du substringa ut namnet eller använda det direkt för att ändra i en nästa query

Edit: Nån hann ett par minuter före mig men jag låter det stå.
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-07-17, 03:02 #9
teamwebs avatar
teamweb teamweb är inte uppkopplad
Medlem
 
Reg.datum: Apr 2006
Inlägg: 100
teamweb teamweb är inte uppkopplad
Medlem
teamwebs avatar
 
Reg.datum: Apr 2006
Inlägg: 100
Vi har "samma" problem men i vårt fall spänner varje kund över olika databaser på en server. Vad jag har gjort för att underlätta min egen vardag är att bygga en uppdaterings sida. Jag kör en diff med hjälp av ett program som heter Sqlyog, diffen kopierar jag och klistrar in. Sedan låter jag skriptet uppdatera alla kunders databaser.

Det är väl ungefär så du menar att du vill jobba med den skillnaden att det ska vara per tabell istället?

För att ge ett exempel:
db.tw_utveckling
table.members
field.pwd (CHARS 255)

db.tw_kunden_1
table.members
field.pwd (CHARS 10)

db.tw_kunden_2
table.members
field.pwd (CHARS 10)

Men efter lång tankemöda kom vi på att pwd bör vara 255 chars istället för 10 chars (exempel) då kör jag en diff på db.tw_utveckling mot db.tw_kunden_1 och det som skiljer dessa emellan i detta exempel pwd får jag ut som sql-kod och låter mitt skript köra på samtliga kunders databaser (dessa ligger på vår server)
teamweb är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 12:48.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017