Tom: Funktion zur Tabellenanalyse

Hello und guten Morgen,

ich habe da eine Minifunktion erstellt, die mir die automatisierte Bearbeitung von Tabellen erleichtern soll.

Die Ausgabe stellt die Tabelle dann so dar:

Array
(
    [ID_TEST] => Array
        (
            [Type] => bigint(20) unsigned
            [Null] =>
            [Key] => PRI
            [Default] =>
            [Extra] => auto_increment
        )

[EDITTIME] => Array
        (
            [Type] => datetime
            [Null] => YES
            [Key] =>
            [Default] =>
            [Extra] =>
        )

[UPDATETIME1] => Array
        (
            [Type] => timestamp(14)
            [Null] => YES
            [Key] =>
            [Default] =>
            [Extra] =>

...
}

-----------------------------------------------------
Die Funktion:

function get_info($con,$table)
{
  if (!$con) return false;
  if (strlen($table) == 0) return false;

$sql = "show columns from $table";
  $res = mysql_query($sql,$con);

if (!$res) return false;

$info = array();
  while ($rec = mysql_fetch_assoc($res))
  {
    $field=$rec["Field"];
    unset($rec["Field"]);
    $info["$field"]=$rec;
  }
  return $info;
}
-------------------------------------------------------

Ich habe zwar alles durchgewühlt, aber ich konnte keine fertige Funktion finden, die die Feldnamen als Index bereitstellt. Falls Ihr doch eine kennt, oder einen Verbesserungsvorschlag hättet, dann wäre Rückmeldung nett.

Viele Grüße aus dem Zentrum Norddeutschlands

Tom

  1. Hello und guten Morgen,

    ich habe da eine Minifunktion erstellt, die mir die automatisierte Bearbeitung von Tabellen erleichtern soll.

    Die Ausgabe stellt die Tabelle dann so dar:

    Array
    (
        [ID_TEST] => Array
            (
                [Type] => bigint(20) unsigned
                [Null] =>
                [Key] => PRI
                [Default] =>
                [Extra] => auto_increment
            )

    [EDITTIME] => Array
            (
                [Type] => datetime
                [Null] => YES
                [Key] =>
                [Default] =>
                [Extra] =>
            )

    [UPDATETIME1] => Array
            (
                [Type] => timestamp(14)
                [Null] => YES
                [Key] =>
                [Default] =>
                [Extra] =>

    ...
    }


    Die Funktion:

    function get_info($con,$table)
    {
      if (!$con) return false;
      if (strlen($table) == 0) return false;

    $sql = "show columns from $table";
      $res = mysql_query($sql,$con);

    if (!$res) return false;

    $info = array();
      while ($rec = mysql_fetch_assoc($res))
      {
        $field=$rec["Field"];
        unset($rec["Field"]);
        $info["$field"]=$rec;
      }
      return $info;
    }

    Ich habe zwar alles durchgewühlt, aber ich konnte keine fertige Funktion finden, die die Feldnamen als Index bereitstellt. Falls Ihr doch eine kennt, oder einen Verbesserungsvorschlag hättet, dann wäre Rückmeldung nett.

    Viele Grüße aus dem Zentrum Norddeutschlands

    Tom

    Moin Tom,

    versuche es es damit doch einmal.

    $sql="select * from dummetabelle";
    $res=mysql_query($sql) or die (mysql_error());
    $zeile=mysql_fetch_array($res);
    for($i = 0; $i < mysql_num_rows($res); $i++)
    {
         $tag=mysql_field_name($res, $i);
         echo $tag."<br>\n";
    }

    1. Hello Wolfram,

      Array
      (
          [ID_TEST] => Array
              (
                  [Type] => bigint(20) unsigned
                  [Null] =>
                  [Key] => PRI
                  [Default] =>
                  [Extra] => auto_increment
              )

      versuche es es damit doch einmal.

      $sql="select * from dummetabelle";
      $res=mysql_query($sql) or die (mysql_error());
      $zeile=mysql_fetch_array($res);
      for($i = 0; $i < mysql_num_rows($res); $i++)
      {
           $tag=mysql_field_name($res, $i);
           echo $tag."<br>\n";
      }

      Halte ich für unökonomisch ;-)
      Was soll ich mit den Daten der Tabelle, ich brauch die Metadaten
      Trotzdem danke für den Vorschlag.

      Grüße

      Tom

      1. Hello Wolfram,

        Array
        (
            [ID_TEST] => Array
                (
                    [Type] => bigint(20) unsigned
                    [Null] =>
                    [Key] => PRI
                    [Default] =>
                    [Extra] => auto_increment
                )

        versuche es es damit doch einmal.

        $sql="select * from dummetabelle";
        $res=mysql_query($sql) or die (mysql_error());
        $zeile=mysql_fetch_array($res);
        for($i = 0; $i < mysql_num_rows($res); $i++)
        {
             $tag=mysql_field_name($res, $i);
             echo $tag."<br>\n";
        }

        Halte ich für unökonomisch ;-)
        Was soll ich mit den Daten der Tabelle, ich brauch die Metadaten
        Trotzdem danke für den Vorschlag.

        Grüße

        Tom

        Es geht auch mit dem Befehl
        $sql="select * from dummetabelle limit 0,1".

        Das ist sehr viel ökonomischer.

        Grüße,

        Wolfram

        1. Hello Wolfram,

          [ID_TEST] => Array
            (
              [Type] => bigint(20) unsigned
              [Null] =>
              [Key] => PRI
              [Default] =>
              [Extra] => auto_increment
            )

          Es geht auch mit dem Befehl
          $sql="select * from dummetabelle limit 0,1".

          Das ist sehr viel ökonomischer.

          Da komme ich aber nicht ohne Umwwege an die Metadaten der Tabelle. Die benötige ich dann für die Anzeige der Daten für die Bestimmung der Anzeigemethode (String, Text, Bild (Blob), Datum, Zahl,...)

          [Anmerkung: Ich speicher keine Bilder in der DB, aber...]

          Grüße

          Tom

  2. hi,

    Ich habe zwar alles durchgewühlt, aber ich konnte keine fertige Funktion finden, die die Feldnamen als Index bereitstellt.

    ich glaube, du suchst http://www.mysql.de/doc/de/SHOW_DATABASE_INFO.html.
    SHOW COLUMS sollte helfen.

    gruss,
    wahsaga

    1. hi,

      SHOW COLUMS sollte helfen.

      SHOW COLUMNS heisst es richtig.

      gruss,
      wahsaga

      1. Hello,

        danke für's wühlen.
        Genau diese Funktion bring mich am nächsten an meine Lösung (siehe Zeile 6 meiner Funktion).

        Leider hat sie eben nicht den Spaltennamen als Indes des Asso-Arrays-

        Liebe Grüße aus dem Zentrum Norddeutschlands

        Tom

        1. hi,

          Genau diese Funktion bring mich am nächsten an meine Lösung (siehe Zeile 6 meiner Funktion).

          Leider hat sie eben nicht den Spaltennamen als Indes des Asso-Arrays-

          das kannst du hier m.e. auch nicht erwarten.
          du bekommst als ergebnis schliesslich eine "tabelle" zurück.

          du bekommst die folgenden "spaltennamen" im ergebnis geliefert:
          Field  Type  Null  Key  Default  Extra

          die "richtigen" spaltennamen aus deiner tabelle stehen in den _zeilen_ in der _spalte_ field.

          gruss,
          wahsaga

          1. Hallo,

            Genau diese Funktion bring mich am nächsten an meine Lösung (siehe Zeile 6 meiner Funktion).

            Leider hat sie eben nicht den Spaltennamen als Index des Asso-Arrays-

            das kannst du hier m.e. auch nicht erwarten.
            du bekommst als ergebnis schliesslich eine "tabelle" zurück.

            du bekommst die folgenden "spaltennamen" im ergebnis geliefert:
            Field  Type  Null  Key  Default  Extra

            die "richtigen" spaltennamen aus deiner tabelle stehen in den _zeilen_ in der _spalte_ field.

            Dass ich das begriffen habe, geht ja wohl aus meiner Funktion hervor! *zurückbeiss*

            Wie löse ich nun diese zeilenweise information in ein Array auf, dessen Index eine Spalte der Tabelle (Resultset) wird und dessen assoziative Elemente aus den restlichen Elementen der jeweiligen Zeile bestehen.

            Gibt es da eine bessere Möglichkeit, als die von mir gewählte?

            Grüße

            Tom