it-swarm.com.de

Einfachste Möglichkeit, Zeilen zu duplizieren

Das, was ich am nächsten an dem finden kann, was ich tun möchte, ist hier , aber meine Unerfahrenheit bringt mich verloren. Grundsätzlich möchte ich eine Reihe von Datensätzen kopieren, eine Spalte ändern und sie wieder in dieselbe Tabelle einfügen (es handelt sich also fast um ein Duplikat der Originaldaten).

Weitere Informationen: Das Tischmenü ist eine Hash-Tabelle für ein Lebensmittelmenü (daher identifiziert jede Zeile in der Tabelle eine Menükategorie (Vorspeise, Hauptgericht oder Wüste zum Beispiel) und Produkte (Fish and Chips).

Tabellenstruktur:

menuship3, CREATE TABLE `menuship3` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `headhash` char(40) DEFAULT NULL,
  `menucardhash` char(40) DEFAULT NULL,
  `menucathash` char(40) DEFAULT NULL,
  `producthash` char(40) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `headhash` (`headhash`)
) ENGINE=InnoDB AUTO_INCREMENT=52 DEFAULT CHARSET=utf8

In Programmierkreisen würde ich sagen, ich möchte meine Daten "teilen" ...

Wenn mein Tabelleninhalt so wäre:

id, headhash, menucardhash, menucathash, producthash
-----------------------------------------------------
 1,  aaa    ,   aaa       ,   aaa      ,   aaa
 2,  aaa    ,   aaa       ,   aaa      ,   bbb
 3,  aaa    ,   aaa       ,   aaa      ,   ccc
 4,  aaa    ,   aaa       ,   bbb      ,   ddd
 5,  aaa    ,   aaa       ,   ccc      ,   eee
 6,  aaa    ,   other     ,   xyz      ,   fgi
 7,  aaa    ,   other     ,   xyz      ,   fgh

Ich möchte alle Datensätze mit menucardhashaaa (Zeilen 1-5) duplizieren, daher erhalte ich eine Tabelle mit 12 Datensätzen. Die zusätzlichen Datensätze enthalten neue Menucarhashqqq anstelle von Menucardhashaaa.

id, headhash, menucardhash, menucathash, producthash
-----------------------------------------------------
 8,  aaa    ,   qqq       ,   aaa      ,   aaa
 9,  aaa    ,   qqq       ,   aaa      ,   bbb
10,  aaa    ,   qqq       ,   aaa      ,   ccc
11,  aaa    ,   qqq       ,   bbb      ,   ddd
12,  aaa    ,   qqq       ,   ccc      ,   eee

Das Ergebnis bedeutet, dass ich Datensätze mit Ähnlichkeit habe. Die Datensätze 1 bis 5 ähneln den Datensätzen 8 bis 12 - die Unterschiede sind die Spalten id und menucardhash.

Ich wollte nur die Datensätze in PHP auswählen, Menucathash ändern und sie an die Datenbank zurücksenden, aber ich fragte mich, ob es eine SQL-Abfrage gab, die dies für mich tun und so den CPU-Zyklus-Overhead reduzieren konnte.

Ist dies über ein oder zwei Abfragen möglich, oder ist es besser, wenn ich PHP das Gewicht trage)?

Danke im Voraus...

7
fiprojects

Dies ist eine sehr einfache INSERT .. SELECT Abfrage.

Das id ist nicht in der Spaltenliste enthalten, da es die Eigenschaft AUTO_INCREMENT Hat und automatisch Werte erhält. Sie müssen nur 'aaa' Durch den Menucardhash-Wert ersetzen, von dem Sie duplizieren möchten, und 'qqq' Durch den neuen Wert:

INSERT INTO menuship3
    (headhash, menucardhash, menucathash, producthash)
SELECT 
    headhash, 'qqq', menucathash, producthash
FROM 
    menuship3
WHERE 
    menucardhash = 'aaa' ;
6
ypercubeᵀᴹ