Anzeige:
Ergebnis 1 bis 11 von 11

Thema: unbekannte Anzahl an Spalten

  1. #1
    Registrierter Benutzer
    Registriert seit
    20.04.2001
    Beiträge
    79

    unbekannte Anzahl an Spalten

    Hallo,
    ich habe ein kleines MySQL Problem. Ich habe eine Datenbank, bei der die ersten 5 Spalten immer fix sind. Die restlichen Spaltenanzahl ist unbekannt.
    Meine Frage ist nun, wie erhalte ich nun die Namen der Spalten bzw. auch deren Anzahl?
    Kann ich eigentlich mittels MySQL 4.0.x auch unterabfragen machen? Beispielsweise: UPDATE person SET alter=20 WHERE frau = (SELECT geschlecht FROM db2.db);

    Danke & Grüßle
    oafish

  2. #2
    Registrierter Benutzer
    Registriert seit
    22.08.2002
    Ort
    Nürnberg
    Beiträge
    638
    Zitat Zitat von oafish
    Hallo,
    ich habe ein kleines MySQL Problem. Ich habe eine Datenbank, bei der die ersten 5 Spalten immer fix sind. Die restlichen Spaltenanzahl ist unbekannt.
    Meine Frage ist nun, wie erhalte ich nun die Namen der Spalten bzw. auch deren Anzahl?
    Das kann nicht sein. Das ist schlechtes Datenbanklayout. Denn eine Tabelle hat immer eine definierte Anzahl an Spalten, ansonsten kann sie gar nicht angelegt werden.

    Informationen zu Tabellen? RTFM: http://dev.mysql.com/doc/mysql/de/sh...base-info.html


    Zitat Zitat von oafish
    Kann ich eigentlich mittels MySQL 4.0.x auch unterabfragen machen? Beispielsweise: UPDATE person SET alter=20 WHERE frau = (SELECT geschlecht FROM db2.db);
    öhm ... RTFM ... http://dev.mysql.com/doc/mysql/en/subqueries.html

    Pingu
    Geändert von Pingu (30-03-2005 um 10:39 Uhr)
    Homepage: www.pingu.info

  3. #3
    Registrierter Benutzer
    Registriert seit
    20.04.2001
    Beiträge
    79
    Schon klar, nur das Problem ist, die Spalten werden von einem php-Skript je nach Bedarf generiert. Mal werden nur 10 mal 500 Spalten neu angelegt. Ich dachte nun, es gäbe einen Befehl in MySQL um sich dies anzeigen zu lassen.

    Ich hätte dann noch eine Frage zu den Spaltennamen, kann ich diese irgendwie auslesen?

    oafish

  4. #4
    Registrierter Benutzer
    Registriert seit
    21.06.1999
    Beiträge
    677
    Schon klar, nur das Problem ist, die Spalten werden von einem php-Skript je nach Bedarf generiert.

    Pingu hat recht, da ist wohl was an Deinem Design oberfaul. Tabellenstrukturen werden im regulären Betrieb nicht dynamisch geändert, sondern nur Tabelleninhalte. Punkt.

    Rausfinden lässt sich die Tabellnstruktur immer mittels Abfragen auf den "System Catalog" (oder bei Oracle: "Data Dictionary"). Allerdings nicht DB-unabhängig. Oracle hat z.B. all_table_columns usw., wie die Katalogtabellen bei MySQL heißen musst Du der MySQL-Doku entnehmen.

  5. #5
    Registrierter Benutzer
    Registriert seit
    03.04.2002
    Beiträge
    112
    Was sind denn für Daten in den Tabellen und aus welchem Grund lässt du die Tabelle so erstellen mit X Spalten?

    Evtl können wir dir helfen, das Design ein wenig zu verbessern.

    Mfg, Matflasch
    Verteilt die Macht, dass sie keinen mächtig macht!

  6. #6
    Registrierter Benutzer
    Registriert seit
    26.01.2005
    Beiträge
    9
    Den nutzen solchen Dynamischen Spalten ist groß ,zum Beispiel in einen Forum
    wo man zusätzliche Felder für das Profiel selbst anlegen kann.Ich verwende dies für ein Rechtemanagement für ein CMS.Die Tabellennamen sollten aber in einer Config Datei abgespeichert werden ,weil dies nicht gerade schnell ist.
    PHP-Code:
    function get_table_list($table_name)
    {
            
    $result=mysql_list_fields($this->sql['db_name'],$table_name);
            
    $menge=mysql_num_fields($result);
            for(
    $i=0;$i<$menge;$i++)
            {
                
    $array[$i]=mysql_field_name($result,$i);
            }
            return 
    $array;

    Edit: Ich habe hier den Admin gemeint und nicht die Nutzer in den CMS.
    Geändert von Draco (30-03-2005 um 18:38 Uhr)
    www.draco-tec.de Funktions und Klassen Referenz der Programmiersprachen.

  7. #7
    Registrierter Benutzer Avatar von mwanaheri
    Registriert seit
    28.10.2003
    Ort
    Bayreuth
    Beiträge
    569
    Das ist erheblich mehr Freiheit, als ich den Nutzern je zugestehen würde. Mindestens würde ich die Anzahl der frei definierbaren Felder begrenzen.
    Und dann für jedes Feld drei Spalten anlegen mit Bezeichnung, typ und Inhalt.
    Bezeichnung vergibt der Nutzer, Typ setzt der Nutzer, der Inhalt wird stets als Varchar gespeichert. Dann muss natürlich deine Software gegebenenfalls eine Menge Umsetzungen machen, z.B. von String zu date, aber immerhin kriegst du einen festen Tabellensatz und kannst sogar die ganzen Benutzerangaben aller Benutzer in einer Tabelle speichern.

    PS:
    Falls du die Einschränkung nicht machen willst:
    (die 5 Standardfelder) | laufende Nummer| Nutzer | Bezeichnung | typ | Inhalt

    und schon darf ein Nutzer wieder 300 "Felder" anlegen.
    Geändert von mwanaheri (30-03-2005 um 18:11 Uhr)
    Das Ziel ist das Ziel.

  8. #8
    Registrierter Benutzer
    Registriert seit
    20.04.2001
    Beiträge
    79
    Hi,
    danke für die Antworten und die Hilfe
    Also die Datenbank habe ich nun grundlegend neu designed und jetzt mit einer fixen Anzahl Spalten. Allerdings habe ich noch ein Problem und weiß nicht genau wie ich das am besten anpacken kann.

    Folgendes, ich habe verschiedene Spalten S1-01, S2-01, S3-01, S4-01 etc.
    Insgesamt also ca. 50 Stück. Nun möchte ich, das alle Spalten, die den Wert 1 besitzen, den Name der Spalte ohne das '-01' in die Zelle einträgt.

    Mein Konstrukt sieht im moment folgendermaßen aus:

    UPDATE personen SET LEFT(hier brauche ich den spaltenname,2) WHERE
    (SELECT * FROM personen WHERE S1-01 =1 OR S2-01 = 1 OR etc.);

    Nur leider weiß ich nicht, wie ich nun den Spaltenname erhalte. Ist dies mit reinem MySQL überhaupt möglich? Ich möchte eigentlich soviel wie möglich mittels SQL machen. Vielleicht mache ich es auch nur zu kompliziert?

  9. #9
    Registrierter Benutzer
    Registriert seit
    20.04.2001
    Beiträge
    79
    Hi,
    soweit hab ich es hinbekommen. Es war eigentlich einfacher als ich zuerst gedacht hatte. Ein kleines problemchen habe ich aber noch...
    Wenn ich eine Abfrage in folgender Form mache:

    select a,b,c,d from personen where sp1=1 or sp2=2 or sp3=1...

    Woher weiß ich dann, in welcher Spalte dann die 1 stand?

    Grüßle
    oafish

  10. #10
    Registrierter Benutzer Avatar von fs111
    Registriert seit
    23.03.2002
    Beiträge
    594
    Die sind in der Reihenfolge, in der Du sie beim "select" angibst, und bei "*" in der Reihenfolge in der sie angelegt wurden.

    fs111
    ....::::Mein Blag::::....

  11. #11
    Registrierter Benutzer Avatar von mwanaheri
    Registriert seit
    28.10.2003
    Ort
    Bayreuth
    Beiträge
    569
    Ich kann mir nicht helfen, ich habe die ganze Zeit das Gefühl, dass du die Datenbank austricksen willst. Das solltest du besser nicht tun. Wenn dein Datenmodell stimmt, kommst du ziemlich sicher in fast allen Fällen mit erschütternd einfachen Abfragen aus.
    Das Ziel ist das Ziel.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •