tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
408
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    sakana sakana ist offline Grünschnabel
    Registriert seit
    Jul 2011
    Beiträge
    2
    Hallo liebe Forenmember,
    ich ersuche um eine Möglichkeit die Ausgabe von "SHOW COLUMNS..." nach eigenem System zu sortieren.

    Grundlage:
    1. In der Datenbank Kontaktdaten gibt es die Felder Privat, Dienstlich, Mobil und Email
    2. Die Datenbank ist mittel alter Table erweiterbar ( also einfügen Privat2, Email3 etc)

    Nun die Fragestellung:

    Wie kann ich mysql anweisen zunächst SHOW COLUMNS FROM Kontaktdaten LIKE "P%" dann LIKE "D%" etc.?
    Da es sich um eine vom User erweiterbare Datenbank handelt sollen gleiche Columns nacheinander ausgegeben werden. Sortieren nach Alphabet ist keine ideale Lösung für mich. Den Umweg über ein "key" würde ich gerne vermeiden.

    Der CODE:
    PHP-Code:
    $sql3 'SHOW COLUMNS FROM ma_Kontaktdaten WHERE FIELD LIKE "P%"';
    $res3 $db->query($sql3);
    $a 0;
    while(
    $row3 $res3->fetch_assoc()) {
        
    $sql4 'SELECT '.$row3['Field'].' FROM Kontaktdaten WHERE ma_id = "'.$ma_id.'"';
        
    $res4 $db->query($sql4);
        
    $row4 $res4->fetch_assoc();
        
    $field $row3['Field'];
        if(
    $field != 'ma_id') {
            
    $a++;
            if((
    $row4[$field] != '') OR ($row3['Field'] == 'Privat') OR ($row3['Field'] == 'Dienstlich') OR ($row3['Field'] == 'Mobil') OR ($row3['Field'] == 'Email')) {
                echo 
    '<td style="border-right: 0; visibility:visible">'.$field.'</td><td style="border-left: 0"><input type="text" name="kontakt['.$field.']" value="'.$row4[$field].'" /></td>';
            }
            if(
    $a 1) { echo '</tr><tr>'$a=0;}
        }

    Die Sortierung:
    1. LIKE "PRIVAT%"
    2. LIKE "DIENSTLICH%"
    3. LIKE "Mobil%"
    4. LIKE "Email%"
    5. der Rest

    Im Voraus vielen herzlichen Dank an die vielen engagierten Helfer, hat mir bereits sehr oft geholfen dank der SuFu

    Gruß Sakana
     

  2. #2
    SeeKing SeeKing ist offline Mitglied Silber
    Registriert seit
    Oct 2004
    Beiträge
    71
    SHOW COLUMNS ist hier meiner Meinung nach der komplett falsche Ansatz....
    SHOW COLUMNS bzw. die MySQL Meta Tables sind für Administrative Aufgaben gedacht.

    In solchen Anwendungsfällen löst man benötigte Felder n:m auf und macht daraus 2 Tabellen eine für "Spaltennamen" die andere für die eigentlichen "Spaltenwerte" und joint anschließend. Dann gehen auch solche Scherze....
     

  3. #3
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Hi

    Mach doch 5 Abfragen mit dem jeweiligen Filter und verknüpf sie per UNION
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  4. #4
    chibisuke chibisuke ist offline Mitglied Brillant
    Registriert seit
    Sep 2003
    Beiträge
    807
    Benutz dafür einfach nicht SHOW COLUMNS sondern die information_schema tabellen.
    Code sql:
    1
    
    SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'DBName' AND TABLE_NAME = 'ma_Kontaktdaten' AND COLUMN_NAME LIKE 'P%'

    und nun kannst du die einelnen abfragen einfach mit unions zusammen führen.
    Code sql:
    1
    2
    3
    4
    5
    
    SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'DBName' AND TABLE_NAME = 'ma_Kontaktdaten' AND COLUMN_NAME LIKE 'P%'
    UNION ALL 
    SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'DBName' AND TABLE_NAME = 'ma_Kontaktdaten' AND COLUMN_NAME LIKE 'D%'
    UNION ALL 
    ...
     

  5. #5
    sakana sakana ist offline Grünschnabel
    Registriert seit
    Jul 2011
    Beiträge
    2
    Guten Morgen Nico und Chibisuke und Seeking
    habs zwar noch nicht probiert, aber klappt sicher, super von euch beiden. Herzlichen Dank. Manchmal kommt man auf die einfachsten Sachen nicht
    Naja, wenn man sich mehrere Jahre nicht mehr mit proggen beschäftig hat...

    Gruß Sakana
     

  6. #6
    Avatar von vandamp
    vandamp vandamp ist offline Mitglied Gold
    Registriert seit
    Nov 2003
    Ort
    Wien
    Beiträge
    155
    du könntest es auch in einem Statement machen, wenn du dir eine Sortierhilfe baust - weiß nicht was du vor hast aber die Abbildung von n:m mit einer extra Tabelle ist sicher besser.

    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    SELECT
    *
    CASE WHEN xx LIKE "PRIVAT%" THEN 1 
            WHEN xx LIKE "DIENSTLICH%" THEN 2
            WHEN xx LIKE "Mobil%" THEN 3
            WHEN xx LIKE "Email%" THEN 4 ELSE 5 END AS Sort
    FROM 
    ....
    ORDER BY
    Sort
     
    m.f.g
    b. zimmel

Ähnliche Themen

  1. Ganz kurze Frage: SHOW COLUMNS außer...
    Von knallbernd im Forum Relationale Datenbanksysteme
    Antworten: 4
    Letzter Beitrag: 12.07.07, 15:06
  2. Ganz kurze Frage: SHOW COLUMNS außer...
    Von knallbernd im Forum PHP
    Antworten: 4
    Letzter Beitrag: 12.07.07, 15:06
  3. MySql Columns - Namen herausfinden!
    Von time-master im Forum PHP
    Antworten: 2
    Letzter Beitrag: 12.12.05, 13:46
  4. MySql: Table 'mysql.host' doesn't exist | <- ?
    Von cardex im Forum Relationale Datenbanksysteme
    Antworten: 4
    Letzter Beitrag: 13.08.02, 08:38
  5. SHOW TABLE STATUS von was?
    Von Der Held im Forum Relationale Datenbanksysteme
    Antworten: 6
    Letzter Beitrag: 20.02.02, 07:56

Stichworte