WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 23.12.2006, 00:15   #1
jak
Inventar
 
Registriert seit: 13.06.2001
Beiträge: 1.830


Standard

Tabelle: tab
Code:
UID | category | title | other | copyof
1   | a        | asd   | foo      0
2   | b        | fgh   | bar      0
3   |          | jkl   |          2
4   | c        | yxc   | qwe      0
5   | c        | vbn   | rtz      2
Eintrag 3 hat copyof = 2, d.h. er ist eine Kopie des zweiten Eintrags. Wenn er in einem Feld einen Eintrag hat (z.B. title), gilt dieser, sonst gilt der Eintrag der Zeile deren ID = 2 ist.

Meine Lösung ist jetzt in der Form:
SELECT uid, 0 as orig_id, category, NULL as orig_category, title, NULL as orig_title, other, NULL as orig_other FROM tab WHERE copyof = 0
UNION
SELECT copy.uid, orig.uid as orig_id, copy.category, orig.category as orig_category, copy.title, orig.title as orig_title, copy.other, orig.other as orig_other FROM tab AS orig, tab AS copy WHERE copy.copyof = orig.uid

Das liefert:
Code:
uid | orig_uid | category | orig_category | title | orig_title | other | orig_other
1   | 0        | a        | NULL          | asd   | NULL       | foo   | NULL
2   | 0        | b        | NULL          | fgh   | NULL       | bar   | NULL
4   | 0        | c        | NULL          | yxc   | NULL       | qwe   | NULL
3   | 2        |          | b             | jkl   | fgh        |       | bar 
5   | 2        | c        | b             | jkl   | fgh        | rtz   | bar
Nachteil: die Statements werden ziemlich unübersichtlich. Wenn ich z.B nur Einträge mit Kategorie b haben will, sieht das so aus:
SELECT uid, 0 as orig_id, category, NULL as orig_category, title, NULL as orig_title, other, NULL as orig_other FROM tab WHERE copyof = 0 AND category = 'b'
UNION
SELECT copy.uid, orig.uid as orig_id, copy.category, orig.category as orig_category, copy.title, orig.title as orig_title, copy.other, orig.other as orig_other FROM tab AS orig, tab AS copy WHERE copy.copyof = orig.uid WHERE ((copy.category = '' AND orig.category = b) OR (copy.category = 'b'))

und liefert:
Code:
uid | orig_uid | category | orig_category | title | orig_title | other | orig_other
2   | 0        | b        | NULL          | fgh   | NULL       | bar   | NULL
3   | 2        |          | b             | jkl   | fgh        |       | bar
Wenn es also eine bessere Methode gibt freue ich mich, ansonsten kann ich auch mit der aktuellen Methode leben.

jak
____________________________________
Join the DNRC | Godwin\'s Law (thx@stona)
Documentation is like sex: If it\'s good, it\'s very, very good. If it\'s bad, it\'s better than nothing.
\"In theory, theory and practice are the same. In practice, they are not\" (Lawrence Berra)
jak ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:49 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag