Steusi
Nasenbär
Hallo Leute,
ich habe bei mir einige Bestelldaten. Da gibt es ein Feld Positionen, welche ich als TinyInt laufen hatte. Nun gibt es doch tatsächliche einige Bestellungen, die mehr als 127 Positionen haben. Also habe ich die Spalte in Int geändert, nur muss ich auch noch die fehlerhaften Datensätze reparieren

Nun kommt es zu meiner Frage, wie kann ich korrekt Variablen deklarieren?
SET, DECLARE, einfach durch := ?
Ich möchte in soetwas realisieren:
SQL:
@start = (SELECT ID
FROM data
WHERE order_pos = 126
AND order_id = '######')
@dif = (SELECT (ID-order_pos) as dif
FROM data
WHERE ID = @start)
@end = @start +2 + (SELECT COUNT(ID)
FROM data
WHERE order_pos = 127
AND order_id = '######')
UPDATE data SET order_pos = (ID-@dif)
WHERE ID >= @start +2
AND ID <= @end
Geht soetwas?
Kann ich es so über PHPMyAdmin eingeben? Es betrifft nur 10 Bestellungen, sodass ich die '######' fix selbst setze

Würde mich über einen Tipp sehr freuen

DANKE
//edit:
Da es ab morgen laufen muss habe ich es erstmal fix mit PHP gemacht eben. Würde trotzdem gern wissen, wie man soetwas in reinem SQL realisiert. Läuft soetwas über Prozeduren?
Vielleicht hilft der PHP-Code ja zum Verständnis:
PHP:
require("../lib/dbconnect.inc.php");
function do_qry($statement,$debug = true){
$error = substr($statement,0,6);
$ergo = mysql_query($statement);
if(mysql_error() && $debug == true){
echo($error."-Fehler:<br>".mysql_errno()." <b>".mysql_error()."</b><p>");
}
return $ergo;
}
$sql_orderid_qry = "SELECT `order_id`,order_line_item_id, COUNT(ID) as anz
FROM `data`
WHERE `order_line_item_id` = 127
GROUP BY order_line_item_id, `order_id`
HAVING anz > 1";
$sql_orderid = do_qry($sql_orderid_qry);
while($row = mysql_fetch_object($sql_orderid)){
$sql_start_qry = "SELECT ID
FROM data
WHERE order_line_item_id = 126
AND order_id = '{$row->order_id}'";
$start = mysql_fetch_object(do_qry($sql_start_qry))->ID;
$sql_dif_qry = "SELECT (ID - order_line_item_id) AS dif
FROM data
WHERE ID = {$start}";
$dif = mysql_fetch_object(do_qry($sql_dif_qry))->dif;
$sql_end_qry = "SELECT COUNT(ID) as anz
FROM data
WHERE order_line_item_id = 127
AND order_id = '{$row->order_id}'";
$end = mysql_fetch_object(do_qry($sql_end_qry))->anz;
$b1 = $start +2;
$b2 = $start + $end;
$sql_fix_qry = "UPDATE data SET order_line_item_id = (ID-$dif)
WHERE ID >= {$b1}
AND ID <= {$b2}";
do_qry($sql_fix_qry);
}
Zuletzt bearbeitet von einem Moderator: