1. #1
    Avatar von Benzol
    Registriert seit
    16.12.2013
    Beiträge
    215
    Thanked 87 Times in 54 Posts

    Standard Mysql SELECT * aber eine Spalte formatieren

    Guten Abend alle zusammen!
    Ich möchte alle Spalten einer Mysql-Tabelle auslesen aber eine Spalte (Datum) formatieren. Mein Versuch:

    SELECT *, DATE_FORMAT(Datum, "%d.%m.%Y") AS Datum

    Dann bekomme ich aber 2x die Spalte Date. Alle Spalten einzeln aufzählen möchte ich vermeiden da das ziemlich viele sind ^^ Ich bräuchte etwas wie SELECT * WITHOUT(Datum) gibt es etwas in der Art?
    Geändert von Benzol (05.05.2014 um 20:43 Uhr)

  2. #2
    Avatar von beeef
    Registriert seit
    09.02.2014
    Beiträge
    33
    Thanked 10 Times in 7 Posts

    Standard AW: Mysql SELECT * aber eine Spalte formatieren

    mittels eines einfachen SQL-Befehls ist das soweit ich weiß leider nicht möglich, allerdings könntest du dir da locker was mit PHP basteln, bzw. eine temporäre Tabelle/View erstellen, ohne diese eine Spalte.. ansonsten würde ich die doppelte Datumspalte einfach ignorieren?

  3. The Following 2 Users Say Thank You to beeef For This Useful Post:

    Benzol (14.05.2014), Ta1lor (05.05.2014)

  4. #3
    Avatar von KillaVanilla
    Registriert seit
    03.05.2014
    Beiträge
    17
    Thanked 8 Times in 6 Posts

    Standard AW: Mysql SELECT * aber eine Spalte formatieren

    Hallo Benzol,
    Ich habe folgende Lösung für dich

    PHP-Code:
    <?php
    mysql_connect
    ("localhost""mysql_benutzer""mysql_passwort");
    mysql_select_db("deinetabelle");

    $sql_columns 'SHOW COLUMNS FROM deine_tabelle'
    $columns mysql_query($sql_columns);

    $columns_arr = array();
    $blacklist = array('Datum'); // Hier dürfen auch mehr Spalten stehen, so bleibt dieses Skript recht dynamisch
    while ($column mysql_fetch_array($columns)) {
        if (
    in_array($column[0], $blacklist)) { continue; }
        
    arrray_push($columns_arr$column[0]);
    }

    $sql_build_columns 'SELECT ';
    foreach (
    $columns_arr as $c) {
        
    $sql_build_columns .= $c.', ';
    }

    $sql_build_columns 'DATE_FORMAT(Datum, "%d.%m.%Y") AS Datum ';
    $sql_build_columns 'FROM deine_tabelle';

    $table_data mysql_query($sql_build_columns);
    ?>
    Geändert von KillaVanilla (14.05.2014 um 01:16 Uhr)

  5. The Following 2 Users Say Thank You to KillaVanilla For This Useful Post:

    Benzol (14.05.2014), ThunderStorm (16.10.2014)

  6. #4
    Avatar von Nuebel
    Registriert seit
    23.11.2013
    Beiträge
    446
    Thanked 361 Times in 236 Posts

    Standard AW: Mysql SELECT * aber eine Spalte formatieren


    CREATE TEMPORARY TABLE TempTable SELECT *, DATE_FORMAT(Datum, "%d.%m.%Y") AS DatumFormatiert FROM X;
    ALTER TABLE TempTable DROP Datum;
    SELECT * FROM TempTable

  7. The Following 2 Users Say Thank You to Nuebel For This Useful Post:

    Benzol (14.05.2014), ThunderStorm (16.10.2014)

  8. #5
    Gelöschter Benutzer
    Gast

    Standard AW: Mysql SELECT * aber eine Spalte formatieren

    Zitat Zitat von KillaVanilla Beitrag anzeigen
    Hallo Benzol,
    Ich habe folgende Lösung für dich

    [..].
    Die ganzen mysql_* Funktionen sind deprecated, siehe hier: PHP: Deprecated features in PHP 5.5.x - Manual und deine Funktion ist auch ziemlich lang / undynamisch programmiert...

    Mein try:

    PHP-Code:
    $mysqli = new mysqli('localhost''user''pass''db');

    function 
    excludeFieldAndFormat($table$ignoredFields$format) {
        global 
    $mysqli;    
        
        if(!
    is_array($ignoredFields)) $blackListed = array($ignoredFields);
            
        
    $columns $mysqli->query(sprintf('SELECT * FROM `%s`'$table))->fetch_fields();
        
    $blacklisted $ignoredFields;
        
    $fields '';
        
        foreach(
    $columns as $column) {
            if(!
    in_array($column->name$blacklisted)) { $fields .= sprintf('%s, '$column->name); }
        }
        
        return 
    sprintf('SELECT %s%s FROM %s'$fields$format$table);
    }

    echo 
    excludeFieldAndFormat('test''date''DATE_FORMAT(date, "%d.%m.%Y") AS date'); //SELECT id, name, age, DATE_FORMAT(date, "%d.%m.%Y") AS date FROM test 

  9. The Following User Says Thank You to Gelöschter Benutzer For This Useful Post:

    Benzol (14.05.2014)

  10. #6

    Registriert seit
    28.10.2011
    Beiträge
    625
    Thanked 279 Times in 168 Posts

    Standard AW: Mysql SELECT * aber eine Spalte formatieren

    Nicht nur das(wie bereits gesagt) mysql_* nicht mehr verwendet werden sollte, ist in MySQL so einiges möglich.
    Es wird aber hier nirgends gefragt, welcher Datentyp "Datum" überhaupt hat.

    Da du eine weitere Definition erstellst like "XX AS XXX", musst du entweder:
    - Die Spalten seperat ansprechen:
    PHP-Code:
    SELECT `spalte1`, `spalte2`, DATE_FORMAT(Datum"%d.%m.%Y") AS `Datum
    - oder du gehst hin und definierst es neu, wenn es geht:
    PHP-Code:
    SELECT `spalte1`, `spalte2`, DATE_FORMAT(Datum"%d.%m.%Y") AS `tabelle`.`Datum

  11. The Following User Says Thank You to Bubble Gum For This Useful Post:

    Benzol (14.05.2014)

  12. #7
    Avatar von Benzol
    Registriert seit
    16.12.2013
    Beiträge
    215
    Thanked 87 Times in 54 Posts

    Standard AW: Mysql SELECT * aber eine Spalte formatieren

    "Datum" ist ein Linux Timestamp. Ich möchte es aber als Tag.Monat.Jahr ausgeben, daher auch das DATE_FORMAT.
    Etwas mit PHP zu machen wie KillaVanilla und Finn vorgeschlagen haben darauf bin ich in diversen Foren schon gestoßen. Das gefällt mir aber nicht so gut weil dann ja 2 Abfragen an Mysql gehen = schlechtere Performance?! Da hier ein paar verschiedene Lösungen gepostet wurden würde mich interessieren welche die performanteste ist. Und danke schon mal an alle für eure guten Antworten
    Geändert von Benzol (14.05.2014 um 21:32 Uhr)

  13. #8
    Gelöschter Benutzer
    Gast

    Standard AW: Mysql SELECT * aber eine Spalte formatieren

    fetch_fields() cachen, dann ist es nur 1 Query.

    Neues Memcache Objekt erstellen:
    PHP-Code:
    $memcache = new Memcache('localhost'); 
    `$columns` anpassen, damit es vom Memcache Server geholt wird, die `300` anpassen je nachdem wie lange du die Query cachen willst

    PHP-Code:
    $keyName sprintf('columncache_%s'$table);
    $columns = ($memcache->get($keyName) ? $memcache->set($keyName$mysqli->query(sprintf('SELECT * FROM `%s`'$table))->fetch_fields(), 300) : $memcache->get($keyName); 

    Ansonsten mal PHP: Caching queries - Manual anschauen

  14. #9
    Avatar von KillaVanilla
    Registriert seit
    03.05.2014
    Beiträge
    17
    Thanked 8 Times in 6 Posts

    Standard AW: Mysql SELECT * aber eine Spalte formatieren

    Kannst du kurz erklären was Memcache macht?
    Geändert von KillaVanilla (17.05.2014 um 00:25 Uhr)

  15. #10
    Avatar von DotNet
    Registriert seit
    10.06.2015
    Beiträge
    661
    Thanked 316 Times in 185 Posts

    Standard AW: Mysql SELECT * aber eine Spalte formatieren

    Auch wenn das Thema schon etwas älter ist, finde ich an dieser Stelle eine kurze Erklärung sinnvoll, für Leute die via Suche hier landen:
    MemCache ist ein Cache-Server, in dem Daten abgelegt werden können. Dazu definiert man einen Schlüssename als String, und kann dort beliebige Objekte ablegen. Beispielsweise einen Array oder die Instanz eines Models (Klasse). Meist nutzt man sie für relativ aufwändige Rechenoperationen. Das können Kalkulationen von Statistiken sein, wie beispielsweise die Anzeige der insgesamt erstellten Beiträge auf der Startseite. Oder Datenbankabfragen, weil man so Last von der Datenbank nimmt, was gerade bei großen Datenbanken bzw. Tabellen die Leistung erhöht. So spart man sich nämlich, dass diese Operationen unzählige Male ausgeführt werden.

    Im Krieg gibt es keine Gewinner, nur Verlierer!

Ähnliche Themen

  1. Antworten: 8
    Letzter Beitrag: 22.03.2014, 22:57
  2. [PHP] Update Select Problem
    Von ZarneXxX im Forum PHP
    Antworten: 9
    Letzter Beitrag: 18.09.2013, 16:00
  3. C# webBrowser dropdown select
    Von Bl1zz4rD im Forum .Net
    Antworten: 2
    Letzter Beitrag: 05.04.2013, 12:08
  4. Antworten: 4
    Letzter Beitrag: 21.01.2013, 02:24
  5. [Excel] Ganze Spalte Addieren
    Von Minecraft im Forum Software
    Antworten: 1
    Letzter Beitrag: 11.11.2012, 15:49
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.