Aus 2 tabellen eine machen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Aus 2 tabellen eine machen

    Hi!

    Ich hab da kleines Problem, welches ich bereits in 2 Foren gepostet hab.
    Leider führte es bisher nicht zum gewünschten Ergebnis.

    Ich versuche nochmal mein Prob ausführlicher darzustellen:

    Struktur der Tabelle1:

    Code:
    CREATE TABLE `Tabelle1` ( 
    `tid` int(10) NOT NULL auto_increment, 
    `eid` int(10) NOT NULL default '0', 
    `uname` varchar(255) NOT NULL default '', 
    `tel` varchar(15) default NULL, 
    `fax` varchar(15) default NULL, 
    `email` varchar(50) default NULL, 
    `web` varchar(255) default NULL, 
    `catnr` int(11) NOT NULL default '0', 
    PRIMARY KEY (`tid`) 
    ) TYPE=MyISAM AUTO_INCREMENT=100 ; 
    
    - 100 Einträge/Zeilen bereits in der DB drin
    ---------------------------------------------------- 
    Struktur der Tabelle2: 
    CREATE TABLE `Tabelle2` ( 
    `catnr` int(11) NOT NULL auto_increment, 
    `category` varchar(255) NOT NULL default '', 
    UNIQUE KEY `category` (`category`), 
    UNIQUE KEY `catnr` (`catnr`) 
    ) TYPE=MyISAM AUTO_INCREMENT=50 ; 
    
    50 Einträge/Zeilen bereits in der DB drin
    ------------------------------------------------------
    Die Spalte "catnr" in der Tabelle1 ist gleich mit der "catnr" der Tabelle2.

    Anhand der "catnr" werden später in der SELECT FROM Anweisung die beiden Tabellen behandelt um der Daten der Tabelle1 die entsprechenden Kategorienamen aus der Tabelle2 zugeordnet - Feld "category"

    Das Feld "category" in der Tabelle2 beinhaltet die Begriffe (Auto, Frisör, Lackiererei, ... etc ...)

    Jetzt möchte ich die Namen aus der Tabelle2 anhand der "catnr" in die Tabelle1 einfügen und die Tabelle2 später löschen. In der Tabelle1 würde ich anschließend das "catnr"- Feld löschen, so dass nur folgende Felder übrig bleiben:

    tid
    eid
    uname
    tel
    fax
    email
    web
    category

    Später möchte ich da mit der einen Tabelle arbeiten.



    Wie geht das am besten?, sonst muss ich auf Mysql 4. aktualisieren.
    und die Punkt-Methode anwenden.

    ------------------------------------------------


    Gruß


    EDIT:
    code-tags by Abraxax
    Zuletzt geändert von Abraxax; 18.11.2003, 22:01.

  • #2
    das mit einer query zu machen, geht nicht. ob es in der 4er version geht, kann ich im moment nicht sagen.

    das das aber nur ne einmalige aktion bei dir sein wird, kannst du das auch mit einem kleinen script machen.

    PHP-Code:
    <?php

        
    // zugangsdaten zur mysql.
        
    $server 'localhost';
        
    $user 'heinzmueller';
        
    $pass 'heinz sein password';
        
    $database 'wo die tabellen vom heinz drin sind';
            
        
    // verbindung zur mysql herstellen.        
        
    $conn mysql_connect$server$user$pass ) or die('Unable to connect DB-Host');
        
    mysql_select_db$database$conn) or die('Unable to select database');
        
        
    // und nun der ganze gedöns.

        // neue spalte in tab1 aufnehmen.
        
    $res mysql_query('ALTER TABLE Tabelle1
                                ADD category VARCHAR(255) NOT NULL'
    ) or die(mysql_error()); 

        
    // alle daten aus tab2 holen.
        
    $res1 mysql_query('SELECT * FROM Tabelle2') or die(mysql_error());
        while (
    $row=mysql_fetch_assoc($res1))
        {
            
    // namen in die neue spalte eintragen.
            
    $res2 mysql_query("UPDATE Tabelle1 SET
                                    category = '"
    .$row['category']."'
                                 WHERE catnr = "
    .$row['catnr']) or die(mysql_error());
        }
        
        
    // alte spalte löschen. sie wird ja nicht mehr benötigt.
        
    $res mysql_query('ALTER TABLE Tabelle1 DROP catnr') or die(mysql_error()); 

        
    // zweite tabelle entfernen.
        
    $res mysql_query('DROP TABLE Tabelle2') or die(mysql_error()); 

    ?>
    das ganze ist zwar ein wenig quick&dirty. aber für einmal ist das ok so.


    ungetestet versteht sich...
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Warum nicht einfache folgendes:

      Code:
      CREATE TABLE wurst
      SELECT t1.tid, t1.eid, t1.uname, t1.tel, t1.fax, t1.email, t1.web, t2.category
        FROM tabelle1 t1
       INNER JOIN tabelle2 t2
          ON t1.catnr = t2.catnr;
      
      RENAME TABLE tabelle1_alt;
      
      RENAME TABLE wurst TO tabelle1;
      Eventuell müssen dann noch ein paar Typen umgewandelt werden ... und es funzt sogar mit dem phpMyAdmin ...

      PS.: Noch quicker ... und richtig schmuddelig ... aber so macht man's eigentlich ...

      PPS.: Links zum Thema ...
      http://www.mysql.com/doc/en/CREATE_TABLE.html
      http://www.mysql.com/doc/en/RENAME_TABLE.html
      carpe noctem

      [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
      [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

      Kommentar


      • #4
        das ist natürlich besser...
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          @goth
          ich habe deines mal spasseshalber ausprobiert.....

          er legt zwar ne tabelle wurst an. aber ohne daten....

          (nur also info )
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar


          • #6
            Richtig ...

            Code:
            CREATE TABLE wurst
            SELECT t1.tid, t1.eid, t1.uname, t1.tel, t1.fax, t1.email, t1.web, t2.category
              FROM tabelle1 t1
             INNER JOIN tabelle2 t2
                ON t1.catnr = t2.catnr;
                
            INSERT INTO wurst (tid, eid, uname, tel, fax, email, web, category)
            SELECT t1.tid, t1.eid, t1.uname, t1.tel, t1.fax, t1.email, t1.web, t2.category
              FROM tabelle1 t1
             INNER JOIN tabelle2 t2
                ON t1.catnr = t2.catnr;
            
            RENAME TABLE tabelle1_alt;
            
            RENAME TABLE wurst TO tabelle1;
            So ist's vollständig(er) ...
            carpe noctem

            [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
            [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

            Kommentar

            Lädt...
            X