content types automatisch in Taxonomie zusammenfassen ???
Eingetragen von qriz (17)
am 27.08.2009 - 18:47 Uhr in
am 27.08.2009 - 18:47 Uhr in
Hi,
Ich suche schon ne weile nach einer Lösung für folgendes:
Wie kann ich am besten 1000+ nodes aus 10 nodetypen mit identischem cck fieldset(Felder sind identisch) in einen neuen contenttyp ändern oder übertragen und dabei automatisch den alten contenttypen in taxonomieterms schreiben?
p.s. automatisch ist hier der Schlüssel jedes node einzeln stellt ja kein problem dar!
Dankeschön im voraus
- Anmelden oder Registrieren um Kommentare zu schreiben
Mit zwei einfachen
am 27.08.2009 - 22:37 Uhr
Mit zwei einfachen Datenbankabfragen.
Ich bezweifel daß soetwas über bestehende Module machbar ist.
--
könntest du vielleicht ein
am 27.08.2009 - 22:35 Uhr
könntest du vielleicht ein beispiel geben?
_________________________
Ich hab 127.0.0.1 gehackt
Wenn die Inhalte der
am 27.08.2009 - 22:45 Uhr
Wenn die Inhalte der Inhaltstypen
foo
undbar
inbaz
umgewandelt werden sollen, der derzeitige Inhaltstyp im Vokabular mit der ID 42 landen soll:INSERT INTO term_node (nid, vid, tid)
SELECT n.nid, n.vid, td.tid
FROM node AS n
INNER JOIN term_data AS td ON td.name = n.type AND td.vid = 42
WHERE n.type IN ('foo', 'bar');
UPDATE node SET type = 'baz' WHERE type IN ('foo', 'bar');
Das ist natürlich nur dann so einfach, wenn die Begriffe
foo
undbar
schon im Vokabular vorhanden sind und wenn alle CCK-Felder, die infoo
undbar
auftauchen auch inbaz
vorhanden sind.--
Danke ich werde mich uebers
am 29.08.2009 - 01:08 Uhr
Danke ich werde mich uebers wochenende mal darein knien.
_________________________
Ich hab 127.0.0.1 gehackt
Vielen Dank
am 30.08.2009 - 23:22 Uhr
Hat wunderbar geklappt (auch wenn ich den code nicht komplett verstanden hab es hat getan was ich wollte)
RESPEKT und Dank
_________________________
Ich hab 127.0.0.1 gehackt
Die erste Abfrage ist ein
am 31.08.2009 - 09:11 Uhr
Die erste Abfrage ist ein INSERT ... SELECT. Dabei wird eine SELECT-Abfrage verwendet (SELECT ... FROM ... INNER JOIN ... ON ... WHERE) um aus bestehenden Datensätzen neue zu erzeugen und diese dann in eine andere Tabelle einzutragen.
INNER JOIN kombiniert jeden Datensatz aus der node-Tabelle (in der gespeichert ist, welche Nodes es gibt) mit jedem Datensatz aus der term_data-Tabelle (in der gespeichert ist welche Begriffe es gibt) zu einem neuen Datensatz. Die ON-Bedingungen sorgen dafür, das von den neuen Datensätzen nur die verwendet werden, bei denen die Vokabular-ID 42 ist und der Begriff so benannt ist wie der Inhaltstyp. Die WHERE-Bedingng sorg dafür, das nur Nodes der von dir gewünschten Inhaltstypen betrachtet werden.
Ein paar Aufräumarbeiten habe ich noch vergessen:
INSERT INTO content_type_baz (nid, vid)
SELECT n.nid, n.vid
FROM node AS n
LEFT OUTER JOIN content_type_baz AS c ON n.vid = c.vid
WHERE n.type = 'baz' AND c.vid IS NULL
Achtung: Der Name des neuen Inhaltstyps steckt sowohl in der WHERE-Bedingung als auch im Tabellennamen der INSERT und LEFT OUTER JOIN-Zeilen.
Für jeden alten Inhaltstyp, den du noch brauchst, kommt noch folgendes hinzu (exemplarisch für Inhaltstyp 'foo':
DELETE c.*
FROM content_type_foo AS c
LEFT OUTER JOIN node AS n
WHERE n.type = 'baz'
--