[MySQL] 500 Werte ändern... *Erledigt, danke*

T-Offline

GFX-Haudegen
ID: 65803
L
24 April 2006
3.631
262
Hallihallo :)

Ich hoffe es kann mir mal jemand helfen bei meinem Anliegen was ich diesmal selbst schaffen wollte... da es evl öfter mal vorkommen kann.

Also was will ich machen?

Ich habe eine Datenbank, darin viele Tabellen und nun möchte ich in ca. 500 Spalten einer Tabelle genau einen Wert ändern lassen. Von "Y" auf "N".

Kann mir mal jemand ne Hilfestellung geben wie ich anfangen muss? Evl. hilft mir auch etwas wo ich mir dazu mal was durchlesen kann und dann selbst drauf komme... Erfahrungen habe ich aber keine damit :)

PS: Datenbanken sind natürlich frisch gesichert.

Vielen Dank im Vorraus schon :)
 
Zuletzt bearbeitet:
Bist du dir sicher, dass du eine solche Tabellenstruktur brauchst? Überleg lieber mal drüber nach, aus den 500 Tabellen eine Tabelle zu machen ;-)
 
Naja... es wird immer eine neue Tabelle reingeschrieben pro auktion die eingestellt wird, diese Tabelle wird dann nach 90 Tagen gelöscht...

Und ganz ehrlich da etwas dran zu ändern traue ich mir nicht zu ;) Würde ich glaube auch nicht riskieren wollen.
 
Nunja, es ist ein absolut unsauberes System, aber dir sollte ein PHP-Skript mit mysql_list_tables() bzw. dem MySQL-Query
PHP:
SHOW TABLES FROM `database`
weiterhelfen. Da checkst du dann mittels regulären Ausdrücken, ob es entweder eine Angebotstabelle oder eine andere Tabelle ist. Wenn Angebotstabelle -> ein UPDATE-Query, wenn nicht -> überspringen.
 
Zuletzt bearbeitet:
Naja, dann musst du eben 500 Queries machen :-?

Entweder die Tabellen haben numerierte Namen oder sowas oder du brauchst eine SHOW TABLES-Query, um die Tabellennamen erstmal zu bekommen.

edit:
Zu langsam...
 
Aber wenn dien System mal größer wird wird das dem Server extrem zu schaffen machen. und eine solche änderung sollte für einen Programmierer kein allzu großer Aufwand sein...
 
So, wie sollte es anders sein habe ich das völlig falsch ausgedrückt...

Also es ist 1 Tabelle (auctions)

In diese Tabelle werden dann die auktionen mit fortlaufenden nummern eingetragen. Das sind dann wohl Spalten?

So nun habe ich also 2000 Spalten, nicht so viele Tabellen, sorry da hatte ich nen Denkfehler :)

In den Spalten sind nun alle angaben zu der Auktion gespeichert und davon möchte ich die Spalte (hoffe das ist richtig nun) "hpfeat" von Y auf N umstellen... (Der Hammer wäre wenn ich das auch noch auf bestimmte User aufteilen könnte also nur die Auktionen der User beachtet werden...)

Danke euch schonmal für die nette Hilfe ;)
 
Mach doch mal im phpMyAdmin in der entsprechenden Datenbank einen
PHP:
SHOW CREATE TABLE `auctions`
Query und schreib uns die Ausgabe ;)
Dann dürfte es eindeutiger sein :) (Ich verstehs nämlich bisher noch nicht, so wie du es beschrieben hast *g*)

(wenn da jetzt 2000 Spalten kommen, dann müsstest du mir nur noch erklären was hpfeat jetzt genau ist, dann natürlich nicht die Ausgabe posten ;))
 
Habe ich eben gemacht,

PHP:
CREATE TABLE `auctions` ( `id` bigint(20) NOT NULL auto_increment, `itemname` varchar(255) NOT NULL default '', `description` mediumblob NOT NULL, `picpath` varchar(255) NOT NULL default '', `quantity` smallint(6) NOT NULL default '0', `auctiontype` varchar(30) NOT NULL default '', `bidstart` double(16,2) NOT NULL default '0.00', `rp` char(2) NOT NULL default '', `rpvalue` double(16,2) NOT NULL default '0.00', `bn` char(2) NOT NULL default '', `bnvalue` double(16,2) NOT NULL default '0.00', `bi` tinyint(4) NOT NULL default '0', `bivalue` double(16,2) NOT NULL default '0.00', `duration` smallint(6) NOT NULL default '0', `country` varchar(100) NOT NULL default '', `zip` varchar(20) NOT NULL default '', `sc` char(2) NOT NULL default '', `scint` char(2) NOT NULL default '', `pm` text NOT NULL, `category` int(11) NOT NULL default '0', `active` tinyint(4) NOT NULL default '0', `payment_status` varchar(20) NOT NULL default '', `startdate` datetime NOT NULL default '0000-00-00 00:00:00', `enddate` datetime NOT NULL default '0000-00-00 00:00:00', `closed` tinyint(4) NOT NULL default '0', `keywords` text NOT NULL, `nrbids` int(11) NOT NULL default '0', `maxbid` double(16,2) NOT NULL default '0.00', `clicks` int(11) NOT NULL default '0', `ownerid` int(11) NOT NULL default '0', `hpfeat` char(2) NOT NULL default 'N', `catfeat` char(2) NOT NULL default 'N', `bolditem` char(2) NOT NULL default 'N', `hlitem` char(2) NOT NULL default 'N', `private` varchar(10) NOT NULL default '0', `currency` varchar(100) NOT NULL default '', `swapped` tinyint(4) NOT NULL default '0', `postage_costs` double(16,2) NOT NULL default '0.00', `insurance` varchar(50) NOT NULL default '', `type_service` varchar(50) NOT NULL default '', `isswap` char(2) NOT NULL default 'N', `acceptdirectpayment` tinyint(4) NOT NULL default '0', `directpaymentemail` varchar(255) NOT NULL default '', `paidwithdirectpayment` tinyint(4) NOT NULL default '0', `addlcategory` int(11) NOT NULL default '0', `deleted` tinyint(4) NOT NULL default '0', `amountpaid` double(16,2) NOT NULL default '0.00', `paymentdate` int(11) NOT NULL default '0', `processor` varchar(50) NOT NULL default '', `shipping_details` mediumtext NOT NULL, `hpfeat_desc` varchar(255) NOT NULL default '', `reserveoffer` double(16,2) NOT NULL default '0.00', `rpwinner` int(11) NOT NULL default '0', `listin` varchar(20) NOT NULL default 'auction', `close_in_progress` tinyint(4) NOT NULL default '0', `bid_in_progress` tinyint(4) NOT NULL default '0', PRIMARY KEY (`id`) ) TYPE=MyISAM PACK_KEYS=0 COMMENT='Table with auctions details'

Und `hpfeat` will ich den Wert ändern :)

Also es scheinen wohl auch keine 2000 Spalten zu sein ^^ wieder falsch gelegen :p Ich nichtsnutz!
 
Code:
Update auctions SET hpfeat="N" WHERE hpfeat="Y" AND auctiontype="userauction"

Sollte gehen. Nur den letzten Teil musst du abändern, da ich nicht weiß wie du festlegst, ob es eine Userauction ist.

EDIT: Kurze Erklärung. Eine Datenbank enthält Tabellen. Die Tabelle enthält Werte (das könnte man Spalten nennen) und die Tabelle enthält Einträge (das könnte man Reihen nennen).
Spalte = vertikal
Reihe = horizontal
 
Okay, jetzt weiß ich, wie du das meinst :)

Du hast 1 Tabelle mit 2000 Zeilen - Spalten sind die Felder, die für jede Zeile gelten ;)

Wenn du bei sämtlichen Auktionen hpfeat auf 'Y' ändern möchtest, dann musst du einfach folgenden Query ausführen:
PHP:
UPDATE auctions SET hpfeat='N'
Wenn du das für einzelne User machen willst, dann würde ich tippen (!), dass das mittels
PHP:
UPDATE auctions SET hpfeat='N' WHERE ownerid={USERID}
geht, zumindest wenn die Spalten logisch benannt sind. {USERID} wird dann im Query einfach durch eine User-ID ersetzt - ob und wie die bei dir außer in der Datenbank einsichtbar ist, weiß ich aber natürlich nicht ;)
 
Oh ihr seid die besten :) Habe viel gelernt heute! Nun sicher ich nochmal und versuchs dann mal auszuführen ;)

Danke Danke Danke Danke

Edit: Ich habe versucht den Usernamen oder die ID des Users da einzusetzen... dann kommt folgender Fehler.

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 '68 }' at line 1

Edit2: Habe nun die Klammern entfernt danach gings :)
 
Zuletzt bearbeitet:
Soooooo ich habs dank eurer schnellen und netten + kompetenten Hilfe gschafft :) Und dabei sogar ne Menge gelernt...

Kann mich nur 100 x bedanken bei euch!

Ist ja unbezahlbar eure Hilfe :LOL:

MfG.