Problem mit UPDATE von SQL Werten

Also mein Grundproblem ist, dass ich folgenden Code habe:

PHP:
<?php
error_reporting(E_ALL);

require_once('config.php');
require_once(DIR_SYSTEM . 'startup.php');

// Registry
$registry = new Registry();

// Loader
$loader = new Loader($registry);
$registry->set('load', $loader);

// Config
$config = new Config();
$registry->set('config', $config);

// Database 
$db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
$registry->set('db', $db);


$sql = "SELECT DISTINCT email, customer_id FROM `order` WHERE customer_id > 0";

$query = $db->query($sql);

foreach ($query->rows as $row){
	$query2 = $db->query("UPDATE `order` SET customer_id = '". (int)$row['customer_id'] ."' WHERE LCASE(email) = '".strtolower($row['email'])."'");
}
	
echo 'done';
?>

Es aber einfach kein UPDATE in meiner Datenbank durchgeführt wird.

Es sollen alle E-Mails + Benutzer-Id genommen und dann geschaut werden, ob es andere Bestellungen gibt, die die gleiche Mail Adresse verwenden um dort dann die entsprechende Id zuzuweisen (weil bei der anderen Bestellung kein Kundenkonto angelegt wurde, also id=0)

Kann es sein, dass die BEstellungen mit "0" garnicht auf gleiche Mail Adressen überprüft werden, weil oben
Code:
WHERE customer_id > 0";
steht?
 
Zuletzt bearbeitet:
Mal ganz ehrlich, was soll der Update bewirken?

Du wählst die ID und die email. Dann ersetzt du anhand der email die id. Das update mMn immer auf die gleichen Daten. Also du überschtreibst 'abc' mit 'abc'.
 
Also eigentlich möchte ich, dass Bestellungen OHNE ID (0). Anhand einer weiteren Bestellung MIT ID und gleicher Mailadresse diese ID übernehmen.

Damit Bestellungen die zuvor ohne Kundenkonto getätigt wurden, dann im Konto mit auftauchen.
 
Achtung, ungetestet

Zuerst alle EMials auswählen die eine ID=0 haben und eine ID > 0
SQL:
-- Alle die eine 0 id und eine gültige ID haben
SELECT
	email, 
	MAX(customer_id) AS newId,
FROM
	`order`
GROUP BY
	email
HAVING
	MAX(customer_id) > 0
	AND MIN(customer_id) = 0

Kombiniert mit dem UPDATE sieht dann das so aus
SQL:
UPDATE
	`order` AS `old`,
	(
		SELECT
			email, 
			MAX(customer_id) AS newId,
		FROM
			`order`
		GROUP BY
			email
		HAVING
			MAX(customer_id) > 0
			AND MIN(customer_id) = 0	
	) AS `new`
SET
	`old`.customer_id = `new`.new_id
WHERE
	`old`.email = `new`.email
	AND `old`.customer_id = 0
 
Zuletzt bearbeitet von einem Moderator:
Vielen Dank, ich werde das mal testen!

Ist das dann CASE SENSITIVE? Weil teilweise werden die Adressen mal groß oder klein angefangen.

Wenn ich das
SQL:
SELECT
    email, 
    MAX(customer_id) AS newId,
FROM
    `order`
GROUP BY
    email
HAVING
    MAX(customer_id) > 0
    AND MIN(customer_id) = 0
in meinem PhpMyAdmin teste bekomme ich folgende Meldung:
Code:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM `order` GROUP BY email HAVING MAX(customer_id) > 0 AND MIN(' at line 4
 
Zuletzt bearbeitet von einem Moderator:
Nimm das Komma nach dem newId raus.

Versuch das SQL zu verstehen und frag was du daan nicht verstehst

Und ja, noch ist es Case Sensitiv. Das kannst du ja aber leicht ändern.
 
Zurück