MySQL: INSERT - SELECT mit LEFT JOINs

resterampe

Mitglied
Meine Abfrage:
PHP:
 mysql_query("INSERT INTO `parameterwerte` (".$tempa.") 
SELECT (".$tempb.") FROM `produkte_maschinen_parameterwerte` AS `pmp` 
LEFT JOIN `parameterwerte` AS `p` ON `pmp`.`FID_Parameterwerte` = `p`.`ID_Werte` 
WHERE `pmp`.`FID_Produkte` = '".$id_produkte."' 
AND `pmp`.`FID_Maschinen` = '".$_POST['ID_Maschinen']."' 
ORDER BY `p`.`TimeStamp` DESC 
LIMIT 0,1");
Mein Ziel:
Daten aus einer Tabelle in die gleiche Tabelle zu kopieren. In einem zweiten Schritt erfolgt die Datenmanipulation

meine Fehlermeldung:
Code:
1241 - Operand should contain 1 column(s)
meine Frage:
Kann mir einer diese Fehlermeldung bitte so erklären, dass auch ich verstehe was da nicht richtig läuft?

meine Vermutung:
ich vermute, dass der INSERT SELECT - ein Problem mit dem LIMIT hat und deswegen meint es gibt mehr als ein mögliches Ergebnis der SELECT-Abfrage

meine Bitte:
Könnt Ihr mir bitte auch einen Hinweiß geben, wie ich das möglichst effektiv umsetzten kann so dass das klappt.

der komplette Code:
PHP:
if (isset($_POST['stbearbeiten'])) {
        function isNum2($zahl) {
            return (preg_match("/^[0-9]+$/", $zahl));
        }

        $result = mysql_query ("SELECT `FID_Produkte` FROM `produkte_linien` WHERE `FID_Linien` = '".$_POST['ID_Linien']."' ;");

        while ( $row = mysql_fetch_object($result) ) {
            foreach ($row as $id_produkte) {
                  $tempa = "`FID_USER`, ";
                  $tempb = "`p`.`FID_USER`, ";
                 for ($j=1; $j<=49; $j++) {
                    $k = sprintf( "%03u", $j);
                    $w = "W_".$k;
                    $wmin = $w."min";
                    $wmax = $w."max";
                        
                    $tempa .= "`".$w."`, ";
                    $tempb .= "`p`.`".$w."`, ";
                    $tempa .= "`".$wmin."`, ";
                    $tempb .= "`p`.`".$wmin."`, ";
                    $tempa .= "`".$wmax."`, ";
                    $tempb .= "`p`.`".$wmax."`, ";
                }
                $tempa .= "`Bemerkung`";
                $tempb .= "`p`.`Bemerkung`";
                
                mysql_query("INSERT INTO `parameterwerte` (".$tempa.") SELECT (".$tempb.") FROM `produkte_maschinen_parameterwerte` AS `pmp` LEFT JOIN `parameterwerte` AS `p` ON `pmp`.`FID_Parameterwerte` = `p`.`ID_Werte` WHERE `pmp`.`FID_Produkte` = '".$id_produkte."' AND `pmp`.`FID_Maschinen` = '".$_POST['ID_Maschinen']."' ORDER BY `p`.`TimeStamp` DESC LIMIT 0,1");
                
                echo mysql_errno()." - ".mysql_error();
                $neueID = last_insert_id();

                $tempa = "`TimeStamp`, `FID_USER`, ";
                $tempb = "NOW(), '".give_userid()."', ";
                for ($j=1; $j<=49; $j++) {
                    $k = sprintf( "%03u", $j);
                    $w = "W_".$k;
                    $wmin = $w."min";
                    $wmax = $w."max";
                    if (isset($_POST[$w])) {
                        $tempa .= "`".$w."`, ";
                        $tempb .= "'".$_POST[$w]."', ";
                    }
                    if (isset($_POST[$wmin])) {
                        $tempa .= "`".$wmin."`, ";
                        $tempb .= "'".$_POST[$wmin]."', ";
                    }
                    if (isset($_POST[$wmax])) {
                        $tempa .= "`".$wmax."`, ";
                        $tempb .= "'".$_POST[$wmax]."', ";
                    }
                 }
                 if (isset($_POST['Bemerkung'])) {
                    $tempa .= "`Bemerkung`, ";
                    $tempb .= "'".$_POST['Bemerkung']."', ";
                 }
                 $tempa = rtrim($tempa, ', ');
                 $tempb = rtrim($tempb, ', ');
                 $sql = "UPDATE `parameterwerte` SET ( ".$tempa." ) VALUES ( ".$tempb." ) WHERE `ID_Werte` = '".$neueID."' ";
                 if (mysql_query( $sql )) {
                    if ( mysql_query("INSERT INTO `produkte_maschinen_parameterwerte` ( `FID_Produkte`, `FID_Maschinen`, `FID_Parameterwerte` ) VALUES ( '".$_POST['ID_Produkte']."', '".$_POST['ID_Maschinen']."', '".$neueID."' )")) {
                        echo "Die Parameter wurden geändert.";
                    }
                    else {
                        echo mysql_error();
                    }
                }
                mysql_query("INSERT INTO `produkte_maschinen_parameterwerte` ( `FID_Produkte`, `FID_Maschinen`, `FID_Parameterwerte` ) VALUES ( '".$row2->FID_Produkte."', '".$row2->FID_Maschinen."', '".$neueID."' )");
            }
        } 
    }
 
Zuletzt bearbeitet:
soderle,

ich habe meine Query etwas bearbeitet und habe nun einen neuen, einen anderen Fehler...

Code:
1136 - Column count doesn't match value count at row 1
Meine Abfrage schaut wie folgt aus:
PHP:
 mysql_query("INSERT INTO `parameterwerte` (".$tempa.") VALUES ('SELECT (".$tempb.") FROM `produkte_maschinen_parameterwerte` AS `pmp` LEFT JOIN `parameterwerte` AS `p` ON `pmp`.`FID_Parameterwerte` = `p`.`ID_Werte` WHERE `pmp`.`FID_Produkte` = \"".$id_produkte."\" AND `pmp`.`FID_Maschinen` = \"".$_POST['ID_Maschinen']."\" ORDER BY `p`.`TimeStamp` DESC LIMIT 0,1')");
und die Definition der Werte hat sich zu meinem ersten Beitrag nicht verändert, aber trotzdem noch einmal erwähnt:
PHP:
 $tempa = "`FID_USER`, ";
                  $tempb = "`p`.`FID_USER`, ";
                 for ($j=1; $j<=49; $j++) {
                    $k = sprintf( "%03u", $j);
                    $w = "W_".$k;
                    $wmin = $w."min";
                    $wmax = $w."max";

                    $tempa .= "`".$w."`, ";
                    $tempb .= "`p`.`".$w."`, ";
                    $tempa .= "`".$wmin."`, ";
                    $tempb .= "`p`.`".$wmin."`, ";
                    $tempa .= "`".$wmax."`, ";
                    $tempb .= "`p`.`".$wmax."`, ";
                }
                $tempa .= "`Bemerkung`";
                $tempb .= "`p`.`Bemerkung`";
Da es bei dem Fehler um die Tabelle geht, hier noch einmal ein SQL-Statement zum erzeugen und nachschlagen:
Code:
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Datenbank: `parameter`
--

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

--
-- Tabellenstruktur für Tabelle `parameterwerte`
--

CREATE TABLE IF NOT EXISTS `parameterwerte` (
  `ID_Werte` int(10) NOT NULL auto_increment,
  `TimeStamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
  `FID_User` int(10) NOT NULL,
  `Bemerkung` text NOT NULL,
  `W_001` text COMMENT 'Sollwert',
  `W_001min` text COMMENT 'Minimalwert',
  `W_001max` text COMMENT 'Maximalwert',
  `W_002` text COMMENT 'Sollwert',
  `W_002min` text COMMENT 'Minimalwert',
  `W_002max` text COMMENT 'Maximalwert',
  `W_003` text COMMENT 'Sollwert',
  `W_003min` text COMMENT 'Minimalwert',
  `W_003max` text COMMENT 'Maximalwert',
  `W_004` text COMMENT 'Sollwert',
  `W_004min` text COMMENT 'Minimalwert',
  `W_004max` text COMMENT 'Maximalwert',
  `W_005` text COMMENT 'Sollwert',
  `W_005min` text COMMENT 'Minimalwert',
  `W_005max` text COMMENT 'Maximalwert',
  `W_006` text COMMENT 'Sollwert',
  `W_006min` text COMMENT 'Minimalwert',
  `W_006max` text COMMENT 'Maximalwert',
  `W_007` text COMMENT 'Sollwert',
  `W_007min` text COMMENT 'Minimalwert',
  `W_007max` text COMMENT 'Maximalwert',
  `W_008` text COMMENT 'Sollwert',
  `W_008min` text COMMENT 'Minimalwert',
  `W_008max` text COMMENT 'Maximalwert',
  `W_009` text COMMENT 'Sollwert',
  `W_009min` text COMMENT 'Minimalwert',
  `W_009max` text COMMENT 'Maximalwert',
  `W_010` text COMMENT 'Sollwert',
  `W_010min` text COMMENT 'Minimalwert',
  `W_010max` text COMMENT 'Maximalwert',
  `W_011` text COMMENT 'Sollwert',
  `W_011min` text COMMENT 'Minimalwert',
  `W_011max` text COMMENT 'Maximalwert',
  `W_012` text COMMENT 'Sollwert',
  `W_012min` text COMMENT 'Minimalwert',
  `W_012max` text COMMENT 'Maximalwert',
  `W_013` text COMMENT 'Sollwert',
  `W_013min` text COMMENT 'Minimalwert',
  `W_013max` text COMMENT 'Maximalwert',
  `W_014` text COMMENT 'Sollwert',
  `W_014min` text COMMENT 'Minimalwert',
  `W_014max` text COMMENT 'Maximalwert',
  `W_015` text COMMENT 'Sollwert',
  `W_015min` text COMMENT 'Minimalwert',
  `W_015max` text COMMENT 'Maximalwert',
  `W_016` text COMMENT 'Sollwert',
  `W_016min` text COMMENT 'Minimalwert',
  `W_016max` text COMMENT 'Maximalwert',
  `W_017` text COMMENT 'Sollwert',
  `W_017min` text COMMENT 'Minimalwert',
  `W_017max` text COMMENT 'Maximalwert',
  `W_018` text COMMENT 'Sollwert',
  `W_018min` text COMMENT 'Minimalwert',
  `W_018max` text COMMENT 'Maximalwert',
  `W_019` text COMMENT 'Sollwert',
  `W_019min` text COMMENT 'Minimalwert',
  `W_019max` text COMMENT 'Maximalwert',
  `W_020` text COMMENT 'Sollwert',
  `W_020min` text COMMENT 'Minimalwert',
  `W_020max` text COMMENT 'Maximalwert',
  `W_021` text COMMENT 'Sollwert',
  `W_021min` text COMMENT 'Minimalwert',
  `W_021max` text COMMENT 'Maximalwert',
  `W_022` text COMMENT 'Sollwert',
  `W_022min` text COMMENT 'Minimalwert',
  `W_022max` text COMMENT 'Maximalwert',
  `W_023` text COMMENT 'Sollwert',
  `W_023min` text COMMENT 'Minimalwert',
  `W_023max` text COMMENT 'Maximalwert',
  `W_024` text COMMENT 'Sollwert',
  `W_024min` text COMMENT 'Minimalwert',
  `W_024max` text COMMENT 'Maximalwert',
  `W_025` text COMMENT 'Sollwert',
  `W_025min` text COMMENT 'Minimalwert',
  `W_025max` text COMMENT 'Maximalwert',
  `W_026` text COMMENT 'Sollwert',
  `W_026min` text COMMENT 'Minimalwert',
  `W_026max` text COMMENT 'Maximalwert',
  `W_027` text COMMENT 'Sollwert',
  `W_027min` text COMMENT 'Minimalwert',
  `W_027max` text COMMENT 'Maximalwert',
  `W_028` text COMMENT 'Sollwert',
  `W_028min` text COMMENT 'Minimalwert',
  `W_028max` text COMMENT 'Maximalwert',
  `W_029` text COMMENT 'Sollwert',
  `W_029min` text COMMENT 'Minimalwert',
  `W_029max` text COMMENT 'Maximalwert',
  `W_030` text COMMENT 'Sollwert',
  `W_030min` text COMMENT 'Minimalwert',
  `W_030max` text COMMENT 'Maximalwert',
  `W_031` text COMMENT 'Sollwert',
  `W_031min` text COMMENT 'Minimalwert',
  `W_031max` text COMMENT 'Maximalwert',
  `W_032` text COMMENT 'Sollwert',
  `W_032min` text COMMENT 'Minimalwert',
  `W_032max` text COMMENT 'Maximalwert',
  `W_033` text COMMENT 'Sollwert',
  `W_033min` text COMMENT 'Minimalwert',
  `W_033max` text COMMENT 'Maximalwert',
  `W_034` text COMMENT 'Sollwert',
  `W_034min` text COMMENT 'Minimalwert',
  `W_034max` text COMMENT 'Maximalwert',
  `W_035` text COMMENT 'Sollwert',
  `W_035min` text COMMENT 'Minimalwert',
  `W_035max` text COMMENT 'Maximalwert',
  `W_036` text COMMENT 'Sollwert',
  `W_036min` text COMMENT 'Minimalwert',
  `W_036max` text COMMENT 'Maximalwert',
  `W_037` text COMMENT 'Sollwert',
  `W_037min` text COMMENT 'Minimalwert',
  `W_037max` text COMMENT 'Maximalwert',
  `W_038` text COMMENT 'Sollwert',
  `W_038min` text COMMENT 'Minimalwert',
  `W_038max` text COMMENT 'Maximalwert',
  `W_039` text COMMENT 'Sollwert',
  `W_039min` text COMMENT 'Minimalwert',
  `W_039max` text COMMENT 'Maximalwert',
  `W_040` text COMMENT 'Sollwert',
  `W_040min` text COMMENT 'Minimalwert',
  `W_040max` text COMMENT 'Maximalwert',
  `W_041` text COMMENT 'Sollwert',
  `W_041min` text COMMENT 'Minimalwert',
  `W_041max` text COMMENT 'Maximalwert',
  `W_042` text COMMENT 'Sollwert',
  `W_042min` text COMMENT 'Minimalwert',
  `W_042max` text COMMENT 'Maximalwert',
  `W_043` text COMMENT 'Sollwert',
  `W_043min` text COMMENT 'Minimalwert',
  `W_043max` text COMMENT 'Maximalwert',
  `W_044` text COMMENT 'Sollwert',
  `W_044min` text COMMENT 'Minimalwert',
  `W_044max` text COMMENT 'Maximalwert',
  `W_045` text COMMENT 'Sollwert',
  `W_045min` text COMMENT 'Minimalwert',
  `W_045max` text COMMENT 'Maximalwert',
  `W_046` text COMMENT 'Sollwert',
  `W_046min` text COMMENT 'Minimalwert',
  `W_046max` text COMMENT 'Maximalwert',
  `W_047` text COMMENT 'Sollwert',
  `W_047min` text COMMENT 'Minimalwert',
  `W_047max` text COMMENT 'Maximalwert',
  `W_048` text COMMENT 'Sollwert',
  `W_048min` text COMMENT 'Minimalwert',
  `W_048max` text COMMENT 'Maximalwert',
  `W_049` text COMMENT 'Sollwert',
  `W_049min` text COMMENT 'Minimalwert',
  `W_049max` text COMMENT 'Maximalwert',
  PRIMARY KEY  (`ID_Werte`),
  KEY `TimeStamp` (`TimeStamp`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
und ein paar Angaben zum System:
-- MySQL Version: 5.0.51
-- PHP-Version: 5.2.5

Die Kontrollabfrage der Variablen tempa und tempb ergibt folgendes:
HTML:
tempa:
`FID_USER`,
 `W_001`, `W_001min`, `W_001max`, `W_002`, `W_002min`, `W_002max`,
 `W_003`, `W_003min`, `W_003max`, `W_004`, `W_004min`, `W_004max`,
 `W_005`, `W_005min`, `W_005max`, `W_006`, `W_006min`, `W_006max`,
 `W_007`, `W_007min`, `W_007max`, `W_008`, `W_008min`, `W_008max`,
 `W_009`, `W_009min`, `W_009max`, `W_010`, `W_010min`, `W_010max`,
 `W_011`, `W_011min`, `W_011max`, `W_012`, `W_012min`, `W_012max`,
 `W_013`, `W_013min`, `W_013max`, `W_014`, `W_014min`, `W_014max`,
 `W_015`, `W_015min`, `W_015max`, `W_016`, `W_016min`, `W_016max`,
 `W_017`, `W_017min`, `W_017max`, `W_018`, `W_018min`, `W_018max`,
 `W_019`, `W_019min`, `W_019max`, `W_020`, `W_020min`, `W_020max`,
 `W_021`, `W_021min`, `W_021max`, `W_022`, `W_022min`, `W_022max`,
 `W_023`, `W_023min`, `W_023max`, `W_024`, `W_024min`, `W_024max`,
 `W_025`, `W_025min`, `W_025max`, `W_026`, `W_026min`, `W_026max`,
 `W_027`, `W_027min`, `W_027max`, `W_028`, `W_028min`, `W_028max`,
 `W_029`, `W_029min`, `W_029max`, `W_030`, `W_030min`, `W_030max`,
 `W_031`, `W_031min`, `W_031max`, `W_032`, `W_032min`, `W_032max`,
 `W_033`, `W_033min`, `W_033max`, `W_034`, `W_034min`, `W_034max`,
 `W_035`, `W_035min`, `W_035max`, `W_036`, `W_036min`, `W_036max`,
 `W_037`, `W_037min`, `W_037max`, `W_038`, `W_038min`, `W_038max`,
 `W_039`, `W_039min`, `W_039max`, `W_040`, `W_040min`, `W_040max`,
 `W_041`, `W_041min`, `W_041max`, `W_042`, `W_042min`, `W_042max`,
 `W_043`, `W_043min`, `W_043max`, `W_044`, `W_044min`, `W_044max`,
 `W_045`, `W_045min`, `W_045max`, `W_046`, `W_046min`, `W_046max`,
 `W_047`, `W_047min`, `W_047max`, `W_048`, `W_048min`, `W_048max`,
 `W_049`, `W_049min`, `W_049max`,
 `Bemerkung`

tempb:
`p`.`FID_USER`,
 `p`.`W_001`, `p`.`W_001min`, `p`.`W_001max`, `p`.`W_002`, `p`.`W_002min`, `p`.`W_002max`,
 `p`.`W_003`, `p`.`W_003min`, `p`.`W_003max`, `p`.`W_004`, `p`.`W_004min`, `p`.`W_004max`,
 `p`.`W_005`, `p`.`W_005min`, `p`.`W_005max`, `p`.`W_006`, `p`.`W_006min`, `p`.`W_006max`,
 `p`.`W_007`, `p`.`W_007min`, `p`.`W_007max`, `p`.`W_008`, `p`.`W_008min`, `p`.`W_008max`,
 `p`.`W_009`, `p`.`W_009min`, `p`.`W_009max`, `p`.`W_010`, `p`.`W_010min`, `p`.`W_010max`,
 `p`.`W_011`, `p`.`W_011min`, `p`.`W_011max`, `p`.`W_012`, `p`.`W_012min`, `p`.`W_012max`,
 `p`.`W_013`, `p`.`W_013min`, `p`.`W_013max`, `p`.`W_014`, `p`.`W_014min`, `p`.`W_014max`,
 `p`.`W_015`, `p`.`W_015min`, `p`.`W_015max`, `p`.`W_016`, `p`.`W_016min`, `p`.`W_016max`,
 `p`.`W_017`, `p`.`W_017min`, `p`.`W_017max`, `p`.`W_018`, `p`.`W_018min`, `p`.`W_018max`,
 `p`.`W_019`, `p`.`W_019min`, `p`.`W_019max`, `p`.`W_020`, `p`.`W_020min`, `p`.`W_020max`,
 `p`.`W_021`, `p`.`W_021min`, `p`.`W_021max`, `p`.`W_022`, `p`.`W_022min`, `p`.`W_022max`,
 `p`.`W_023`, `p`.`W_023min`, `p`.`W_023max`, `p`.`W_024`, `p`.`W_024min`, `p`.`W_024max`,
 `p`.`W_025`, `p`.`W_025min`, `p`.`W_025max`, `p`.`W_026`, `p`.`W_026min`, `p`.`W_026max`,
 `p`.`W_027`, `p`.`W_027min`, `p`.`W_027max`, `p`.`W_028`, `p`.`W_028min`, `p`.`W_028max`,
 `p`.`W_029`, `p`.`W_029min`, `p`.`W_029max`, `p`.`W_030`, `p`.`W_030min`, `p`.`W_030max`,
 `p`.`W_031`, `p`.`W_031min`, `p`.`W_031max`, `p`.`W_032`, `p`.`W_032min`, `p`.`W_032max`,
 `p`.`W_033`, `p`.`W_033min`, `p`.`W_033max`, `p`.`W_034`, `p`.`W_034min`, `p`.`W_034max`,
 `p`.`W_035`, `p`.`W_035min`, `p`.`W_035max`, `p`.`W_036`, `p`.`W_036min`, `p`.`W_036max`,
 `p`.`W_037`, `p`.`W_037min`, `p`.`W_037max`, `p`.`W_038`, `p`.`W_038min`, `p`.`W_038max`,
 `p`.`W_039`, `p`.`W_039min`, `p`.`W_039max`, `p`.`W_040`, `p`.`W_040min`, `p`.`W_040max`,
 `p`.`W_041`, `p`.`W_041min`, `p`.`W_041max`, `p`.`W_042`, `p`.`W_042min`, `p`.`W_042max`,
 `p`.`W_043`, `p`.`W_043min`, `p`.`W_043max`, `p`.`W_044`, `p`.`W_044min`, `p`.`W_044max`,
 `p`.`W_045`, `p`.`W_045min`, `p`.`W_045max`, `p`.`W_046`, `p`.`W_046min`, `p`.`W_046max`,
 `p`.`W_047`, `p`.`W_047min`, `p`.`W_047max`, `p`.`W_048`, `p`.`W_048min`, `p`.`W_048max`,
 `p`.`W_049`, `p`.`W_049min`, `p`.`W_049max`,
 `p`.`Bemerkung`

Wer kann mir sagen wo mein Denkfehler liegt?
 
Zuletzt bearbeitet:
so,
ich habe das jetzt mit separaten Abfragen gelöst,
aber wo mein Fehler liegt/lag, weiß ich immer noch nicht.

Ich schließe das Thema, aber falls jemand eine Idee hat, gerne her damit :)
Danke
 
Zurück