Ich habe eine Tabelle mit 60 Spalten, die "feld01" bis "feld60" heißen.
Und ich habe eine zweite Tabelle, in der die gewünschte Spaltennummer drinsteht (also z.B. 30).
Jetzt würde ich gerne den Wert aus "feld30" prüfen durch sowas wie:
WHERE CONCAT("feld",tabelle2.wert) > 10
Spaltenname dynamisch bestimmen
gepostet vor 18 Jahre, 9 Monate von BjoernLilleike
gepostet vor 18 Jahre, 9 Monate von TheUndeadable
> Ich habe eine Tabelle mit 60 Spalten, die "feld01" bis "feld60" heißen.
Normalisierung ;-) Daraus macht man eine zweite Tabelle
Ansonsten ist es meines Erachtens nach nicht möglich.
Normalisierung ;-) Daraus macht man eine zweite Tabelle
Ansonsten ist es meines Erachtens nach nicht möglich.
gepostet vor 18 Jahre, 9 Monate von BjoernLilleike
Nein, die Felder gehören schon alle zu einem Datensatz. Sie sind über einen eindeutigen Schlüssel auffindbar, den ich der Einfachheit halber nicht erwähnt hatte.
gepostet vor 18 Jahre, 9 Monate von BjoernLilleike
CONCAT('field_',s.field_nr) liefert mir schon den richtigen String, nur wie bekomme ich hin, dass MySQL das als Feldnamen interpretiert? (s ist hierbei die 2te Tabelle)
gepostet vor 18 Jahre, 9 Monate von Klaus
mach doch eine zweite Tabelle mit Feldnr. ID vom Datensatz und die Felddaten. Dann kannst du das gewünschte Feld mit einem Join zum vorigen Datensatz dazuholen.
gepostet vor 18 Jahre, 9 Monate von BjoernLilleike
Es scheint wohl tatsächlich leider nicht möglich zu sein, weshalb ich das jetzt halt in zwei Schritten machen muss.
gepostet vor 18 Jahre, 9 Monate von Kampfhoernchen
Nur aus neugier:
Wofür brauchst du das?
PS. ähnliche Probleme lassen sich über eine Tabelle "Zusatzinfo" mit folgender Struktur lösen:
bez_ds (Datensatz, auf den Bezug genommen werden soll)
zusatzinfo_typ (Quasi der Feldname, mit ner ID gehts natürlich schneller)
zusatzinfo_content (Den "größten" Datentyp nehmen, in zweifelsfalle BLOB oder TEXT).
Wofür brauchst du das?
PS. ähnliche Probleme lassen sich über eine Tabelle "Zusatzinfo" mit folgender Struktur lösen:
bez_ds (Datensatz, auf den Bezug genommen werden soll)
zusatzinfo_typ (Quasi der Feldname, mit ner ID gehts natürlich schneller)
zusatzinfo_content (Den "größten" Datentyp nehmen, in zweifelsfalle BLOB oder TEXT).
gepostet vor 18 Jahre, 9 Monate von BjoernLilleike
Ich wollte ja gerade massiv Speicherplatz sparen, indem ich diese Daten so kompakt wie möglich ablege, da sie doch in rauen Mengen auftreten können. (Es geht um den Spielern bekannte Gebiete)
Ich hatte sogar mit 1-Bit-PNGs experimentiert, aber das hatte sich aus anderen Gründen zerschlagen. Nevermind; mit PHP-Weiterverarbeitung habe ich das ganze jetzt mit 2 getrennten und superbilligen Querys gelöst.
Ich hatte sogar mit 1-Bit-PNGs experimentiert, aber das hatte sich aus anderen Gründen zerschlagen. Nevermind; mit PHP-Weiterverarbeitung habe ich das ganze jetzt mit 2 getrennten und superbilligen Querys gelöst.
gepostet vor 18 Jahre, 9 Monate von KoMtuR
du könntest es ja so wie bei WoW machen, dass man halt Gebiete entdeckt und nicht einzelne Stellen in der Karte. Somit kannste denk ich mal genug sparen.
gepostet vor 18 Jahre, 9 Monate von Mudder
Ich werde demnächst vor ein ähnliches Problem gestellt, wobei ich hier aber noch auf die Bild-Variante tendiere. Hatte deine "Ablehnung" spielinterne Gründe oder gabs da schwerere Fehler?
gepostet vor 18 Jahre, 9 Monate von BjoernLilleike
Das Problem bestand darin, dass ich die Daten nicht über amfphp nach Flash rüber transferiert bekommen habe.
Soweit ich das rausbekommen habe, hätte ich es entweder über einen LoadMovie machen können oder über kompliziertes hin- und hercodieren.
Ansonsten wäre das mit den Bitmaps die coolste und mit Abstand einfachste Lösung gewesen.
Soweit ich das rausbekommen habe, hätte ich es entweder über einen LoadMovie machen können oder über kompliziertes hin- und hercodieren.
Ansonsten wäre das mit den Bitmaps die coolste und mit Abstand einfachste Lösung gewesen.
gepostet vor 18 Jahre, 9 Monate von Mudder
Ok da ich nicht mit Flash arbeite ist die Bildvariante dann wohl die beste Variante.
gepostet vor 18 Jahre, 9 Monate von Kampfhoernchen
Man muss ja kein "echtes" Bild nehmen. Sondern einfach nur einzelne Bits setzen. 0 für "da war er noch nicht" und 1 für "da war er schon". Das ganze dann schön in einen Integer verpackt und als 1 Feld in die Datenbank gepackt. Eventuell auch ein BigINT oder ein BLOB. Ist auf jeden Fall einfacher als 60 verschiedene Felder in eine Tabelle zu klatschen. Denn was ist wenn deine Karte mal wächst? Dann wächst auch die Feldanzahl immer weiter.
gepostet vor 18 Jahre, 9 Monate von Mudder
Hmm.. Bit-Variante
ich glaub du hast mich grade auf ne gute Idee gebracht.. Danke
ich glaub du hast mich grade auf ne gute Idee gebracht.. Danke
gepostet vor 18 Jahre, 9 Monate von Kampfhoernchen
Was anderes machst du mit nem Bitmap ja eigentlich auch nicht.
gepostet vor 18 Jahre, 9 Monate von BjoernLilleike
Jedes der 60 Felder ist bereits ein Int, bei dem jedes Bit ein Feld darstellt..
Aber ich habe halt immer auch den Anspruch, dass es auch für einen weniger intelligenten Menschen wie mich nachvollziehbar sein muss, deshalb habe ich eben 60 Felder á 4x4 statt ein elend langes BIN wo ich nicht mehr zuordnen kann, ob das denn nun auch den richtigen Wert gespeichert hat.
So kann ich auch so gucken: Planquadrat 44 (Feld 44) Oben links (Bit 1).
Und beim Auslesen habe ich den Vorteil, dass ich Felder mit 0 (gar nichts entdeckt) und 65535 (alles entdeckt) schnell abfrühstücken kann. Den Sonderfall "ein wenig entdeckt" - denn man geht ja in der Regel recht systematisch vor - muss ich dann halt bitweise prüfen..
Das Bitmap hatte für mich den Vorteil, dass es komprimiert gepeichert wird, was bei größeren Karten noch interessanter ist. Und da lässt sich das fertige Ergebnis direkt erzeugen, indem die Maske auf das Originalbild multipliziert wird. Supercool eigentlich, wenn sich Flash nicht so sträuben würde. Und bei meinen Kartengrößen lohnt sich das noch nicht. Das hebe ich mir für ein späteres Spiel dann auf - vielleicht hat bis dahin auch jemand Flash ausgetrickst ;-)
Aber ich habe halt immer auch den Anspruch, dass es auch für einen weniger intelligenten Menschen wie mich nachvollziehbar sein muss, deshalb habe ich eben 60 Felder á 4x4 statt ein elend langes BIN wo ich nicht mehr zuordnen kann, ob das denn nun auch den richtigen Wert gespeichert hat.
So kann ich auch so gucken: Planquadrat 44 (Feld 44) Oben links (Bit 1).
Und beim Auslesen habe ich den Vorteil, dass ich Felder mit 0 (gar nichts entdeckt) und 65535 (alles entdeckt) schnell abfrühstücken kann. Den Sonderfall "ein wenig entdeckt" - denn man geht ja in der Regel recht systematisch vor - muss ich dann halt bitweise prüfen..
Das Bitmap hatte für mich den Vorteil, dass es komprimiert gepeichert wird, was bei größeren Karten noch interessanter ist. Und da lässt sich das fertige Ergebnis direkt erzeugen, indem die Maske auf das Originalbild multipliziert wird. Supercool eigentlich, wenn sich Flash nicht so sträuben würde. Und bei meinen Kartengrößen lohnt sich das noch nicht. Das hebe ich mir für ein späteres Spiel dann auf - vielleicht hat bis dahin auch jemand Flash ausgetrickst ;-)
gepostet vor 18 Jahre, 9 Monate von TheUndeadable
Schau dir mal die Quad-Trees an, die behandeln genau dieses Problem (falls ich nicht irgendwelche Begriffe verwechsel)
http://www.cs.ubc.ca/~pcarbo/cs251/welcome.html
http://www.cs.ubc.ca/~pcarbo/cs251/welcome.html