Seite 1 von 1

wenn Daten aus T1 in auch T2 schreibe sie in T3

Verfasst: 17.05.2007 17:19
von schluebby
Hallo zusammen,

ich weiß nicht mehr weiter...

Theorie:
Ich habe Tabelle 1 (t_user) und Tabelle 2 (t_gruppe). Möchte aus Tabelle 1 die Datensätze wählen, die auch den Kriterien in Tabelle 2 entsprechen und sie in Tabelle 3 (t_auswahl) kopieren.

Problem:
Die Select-Abfrage gibt mir via echo die richtigen Zeilen aus. Aber mit dem Insert klappt es leider nicht. Es wird nichts in Tabelle 3 gefügt.

Script:
$befehl = "INSERT INTO t_auswahl (id, name, gruppe, status, daten)
SELECT *
FROM t_user
INNER JOIN t_gruppe
ON ( t_auswahl.gruppe = t_gruppe.gruppe) WHERE t_gruppe.status < 0
;";


Kann mir wer folgen? Wäre super, das beschäftigt mich nämlich schon seit einiger Zeit.

Eine ähnliche Abrfrage mit gleicher Code-Struktur funktioniert, Unterschied ist nur, bei jener Abfrage gibt es lediglich 2 Tabellen.

Verfasst: 17.05.2007 17:34
von Miriam
Gibt der DB Server einen Fehler aus?

Verfasst: 17.05.2007 17:39
von schluebby
nein, leider gar nichts. leere php seite und leere datenbanktabelle.

Verfasst: 17.05.2007 17:59
von Miriam
Und wenn DU diesen Befehl direkt im phpMyAdmin eingibst?

Code: Alles auswählen

INSERT INTO t_auswahl (id, name, gruppe, status, daten)
SELECT *
FROM t_user
INNER JOIN t_gruppe
ON ( t_auswahl.gruppe = t_gruppe.gruppe) WHERE t_gruppe.status < 0
;

Verfasst: 17.05.2007 18:30
von schluebby

Code: Alles auswählen

#1136 - Column count doesn't match value count at row 1 
müssen vielleicht ALLE drei tabellen die gleiche Anzahl Felder haben?
Tab2 hat weniger als Tab1 und Tab3. Aber es soll ja auch nur mit Tab2 verglichen werden. Die Tabellenanzahl der Daten, die Übergaben werden, sind schon gleich. Oder missinterpretiere ich das?

Verfasst: 17.05.2007 18:53
von Pyramide
Ändere einfach das SELECT * und gib die Spaltennamen genau an (das ist sollte man sowieso immer machen - siehe SELECT * is evil).

Verfasst: 17.05.2007 19:24
von Miriam
schluebby hat geschrieben:

Code: Alles auswählen

#1136 - Column count doesn't match value count at row 1 
Das habe ich mir schon gedacht. Pyramide hat schon die Antwort entsprechend gepostet.

Verfasst: 18.05.2007 09:40
von schluebby

Code: Alles auswählen

INSERT INTO t_auswahl (id, name, gruppe, status, daten)
SELECT t_user.id, t_user.name, t_user.gruppe, t_user.status, t_user.daten
FROM t_user
INNER JOIN t_gruppe
ON ( t_auswahl.gruppe = t_gruppe.gruppe) WHERE t_gruppe.status < 0
;
ah, vielen Dank! So geht's :D .

(Das war ja ne schwere Geburt.)