hallo,
der union macht in prinzip folgendes
der wird noch mein freund...
eine fragebogendatenbank. 30 fragen mit jeweils 2 bis 5 unterfragen
daraus würde ich versuchen eine einzige tabelle zu machen und auch die personen tabelle mit zu integrieren. für die antwort jeder frage oder einer unterabfrage würde dann in einer spalte abgebildet werden.
das wird es ja schon. Frage15 (inhalt geändert) "Was denkst du über php?
- erlernbarkeit: (zu schwierig/schwierig/leicht/zu leicht) [speichert 1, 2, 3 oder 4 in feld 'antwort1' von daten_15]
- hast du php mit php schon mal die nacht verbracht: (ja/nein) [speichert 1oder0 in 'antwort2' von daten_15]
...usw...
das muss meiner meinung nach gar nicht in die datenbank mit rein. erst wenn alle fragen beantwortet sind und die sessionid noch gültig ist, schreibst du in die datenbank. ich gehe mal davon aus, dass die user sowieso anonym sind, sprich ihre daten nicht gespeichert werden. also bevor nicht alles ok ist, wird die datenbank auch nicht in anspruch genommen. ist alles ok, so musst du nur einen datensatz in einer tabelle schreiben, um alle anworten der fragen abbilden zu können.
da gebe ich dir normalerweise absolut recht! ABer in diesem fall sind die ansprechpersonen bekannt und identifiziert. und, es muss jede frage sofort gespeichert werden (vorgabe). damit auch bei abbruch die bisherig beantworteten fragen verfügbar sind. klingt dumm, ist es auch, kannnichtsdafür.
ich habe ursprünglich deshalb für jede frage eine tabelle genommen, damit es nicht so lange dauert einen datensatz zu suchen und weil nur die daten jeweils einer frage in den selben feldern speichern lassen.
da hab ich mich schlecht ausgedrückt. ich war einfach der meinung ich hätte weniger scherereien, wenn ich pro gezeigter frage auf eine eigene tabelle zugreife. und dass ich nicht extra in einer anderen tabelle speichern müsste wieviele felder relevant sind. sondern mit mysql describe oder ähnlichem einfach die feldanzahl abfrage, die ersten mit id, usw abziehe und die sind dann meine datenfelder.
dumm gedacht, jetzt würd ichs auch anders machen aber alles nochmal zu coden für die 150 ansprechpersonen solls auch nicht sein müssen.
ganz schlechter ansatz und bezogen auf die geschwindigkeit einfach mal falsch.
verstanden.
aber wenn ein nachträgliches zusammenfassen in der abfrage hilft..
das sollte es ungemein.
wird gleich mein nächster versuch sein.
inzwischen hab ich daweil malerfolgreich folgendes abgefragt:
SELECT *
FROM daten_1 d
LEFT JOIN sessions s ON d.phpsessionid = s.phpsessionid
WHERE d.phpsessionid = '47666019b8553f9a9389f863d0d0372a'
und ergibt auch genau einen (DEN) datensatz den ich suche.
jetzt müsste ich das nur für jede der 30 tabellen machen und die mit union verknüpfen? gibt es da einen intelligenteren ansatz als das ganze durch eine träge phpschleife ablaufen zu lassen oder einen seitenlangen query zu basteln, wenn der überhaupt verarbeitet wird?
richard