php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 09.11.2006, 22:06  
Erfahrener Benutzer
 
Registriert seit: 03.01.2006
Beiträge: 253
CC84
Standard Durch Spalte definieren, welche Spalte zu ändern ist.

Habe gerade eine Frage, auf die ich im Handbuch so direkt keine Antwort finde. Undzwar habe ich vor mit einer Spalte zu definieren, welche andere Spalte geändert werden soll.

Um mal ein Beispiel zu nennen: Ich habe eine Tabelle für ein Spiel. Jede Gebäude Stufe steht hier in ihrer Spalte. (b_1 bis b_23)
In der Tabelle steht ebenfalls welches Gebäude gerade gebaut wird. (buildingInConstruction) Hier einfach als int (1-23).
Zudem steht in 2 Spalten wie weit der Fortschritt ist (constructiondone) und wie weit gebaut werden muss (constructiontodo).
Ein Cron erhöht nun alle x-Minuten constructiondone um eins. Wenn constructiondone = constructiontodo ist. Sollen die 3 Werte genullt werden und die entsprechende Spalte b_x um eins erhöht werden.
Die Frage ist nun, schaffe ich es irgendwie die Spalte "b_" . buildingInConstruction anzusteuern oder muss ich dazu erst alle Einträge abrufen, in php dann die richtigen Updatestatements formulieren um diese dann einzeln wieder an die DB zu geben?
Letzteres bedeutet ja bedeutend mehr mysql Aufrufe.
CC84 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 09.11.2006, 23:07  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Ähm was is da so schwer dran??

Liest erstmal die Daten aus zum bearbeiten etc.

PHP-Code:
<?php
$query 
''// hier alles auslesen lass ich mal frei ...

mysql_query("UPDATE table
SET
  b_"
.$query['buildingInContstuction']." = '".$neuerWert."',
  constructiondone = 0,
  constructiontodo = 0,
  buildingInConstruction = 0"
);
?>
Flor1an ist offline   Mit Zitat antworten
Alt 09.11.2006, 23:20  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

BAHNHOF
nikosch ist offline   Mit Zitat antworten
Alt 10.11.2006, 17:57  
Erfahrener Benutzer
 
Registriert seit: 09.03.2005
Beiträge: 219
webbi
Standard

Warum verwendest du nicht statt der Struktur b_1 | b_2 | b_3

Eine Tabellenstruktur:

id | spieler | b | gebaut


Wenn ein Spieler b_1 und b_2 hat steht z.b. drin:

5 | 18 | 1 | 1
5 | 18 | 1 | 2

So könntest du direkt die neuen Werte in eine Tabelle schreiben ohne den Umweg über Spaltennamen gehen zu müssen. Also für jedes Gebäude nun eine Zeile, statt einer Spalte.

Ich hoffe, dass ich dein Problem im Ansatz verstanden habe, so ganz klar ist mir nicht was du meinst.
webbi ist offline   Mit Zitat antworten
Alt 10.11.2006, 18:08  
Erfahrener Benutzer
 
Registriert seit: 03.01.2006
Beiträge: 253
CC84
Standard

Zitat:
Zitat von RaZoR
Ähm was is da so schwer dran??

Liest erstmal die Daten aus zum bearbeiten etc.

PHP-Code:
<?php
$query 
''// hier alles auslesen lass ich mal frei ...

mysql_query("UPDATE table
SET
  b_"
.$query['buildingInContstuction']." = '".$neuerWert."',
  constructiondone = 0,
  constructiontodo = 0,
  buildingInConstruction = 0"
);
?>
So kann ich das auch, aber ich wollte ja genau das verhindern und die Rechnung die DB machen lassen.

Und der andere Vorschlag fällt aus einem einfachen Grund aus: Bei 20.000 Inseln, die ich mal Spitzenweise hatte, macht das 20.000*23 Tabelleneinträge. Da ist dann Mysql nicht mehr performant.
CC84 ist offline   Mit Zitat antworten
Alt 28.11.2006, 10:26  
Benutzer
 
Registriert seit: 08.08.2005
Beiträge: 86
Ricochet
Standard

Das halte ich für ein Gerücht.
Da du nie einen kompletten Tabellenscan brauchst (behaupte ich mal so aus meiner browsergameerfahrung mit bedeutend größeren Tabellen).

Eine Gebäude-tabelle sieht bei mir (und wie webbie sagte) z.B. vereinfacht so aus:
building_id, type_id, player_id, level, construction_start, construction_end


wenn du deinen Spielern die Möglichkeit eines Bau-Queues anbieten willst, teilst du die tabelle in eine Gebäudetabelle und eine Bautabelle:

Gebäude:
building_id, type_id, player_id, level

Bau:
construction_id, building_id, start, end (und eventuell noch level, braucht man aber nicht)

Performance ist da absolut kein Problem, vorrausgesetzt du benutzt Indizes für SELECTS/JOINS
__________________
Tabellenlayouts sind out, Browsergames sind schei$$e und die Erde ist eine Scheibe.
Ricochet ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
SQL-Befehl: Spalte innerhalb der Tabelle in andere Spalte... go1denboy Datenbanken 5 12.06.2008 19:06
spalte rechts ausrichten, text aber trotzdem linksbündig Crypi HTML, Usability und Barrierefreiheit 5 14.09.2006 11:35
Teil einer Spalte abfragen? Peoples Datenbanken 2 20.08.2006 15:22
Spalte mit Array angleichen Zahl Datenbanken 3 16.07.2006 18:08
Werte aus gesamter Spalte zählen rotzlöffel PHP Tipps 2006 17 14.05.2006 20:28
mit html klassen definieren und in php ausgeben PHP-Fortgeschrittene 4 16.01.2006 10:31
Links aus Datenbank überprüfen und wen defekt spalte updaten PHP Tipps 2005-2 2 05.09.2005 11:34
doppelte Werte / Strings einer Spalte nur einmal ausgeben... Datenbanken 2 29.07.2005 12:10
Eine weitere Spalte -> weiße Seite seejay HTML, Usability und Barrierefreiheit 3 04.07.2005 08:25
mysql doppelte Vorkommen einer Spalte ausblenden PHP Tipps 2005 3 23.03.2005 15:56
Abfrage der Anzahl bestimmter Werte in einer Spalte Datenbanken 1 13.03.2005 12:30
Ergebnisse in einer anderen Spalte ausgeben PHP Tipps 2005 10 10.02.2005 10:13
[Erledigt] spalte auswählen? Datenbanken 4 04.12.2004 19:22
[Erledigt] Spalte nach grösse anzeigen lassen ! Datenbanken 2 31.08.2004 22:32
Spalte anlegen und in diese Daten einfügen Anuschka PHP Tipps 2004 11 09.08.2004 00:43

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
spalte durch eine andere definieren, spalte definieren, wenn spalte a = 1; dann spalte b_1, welche spalte, sql 2008 spalte level nennen, spaltename definieren

Alle Zeitangaben in WEZ +2. Es ist jetzt 05:27 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.