Eintrag mit multiplen Daten suchen / sortieren

Benutzer-42

abgemeldet
20 April 2006
22.497
1.328
So, nachdem ich mal wieder ein Stückchen weiter bin, heute ein neues Problem:

Ich will mein Newssystem so machen, dass ich dort, wenn nötig, mehrere Systeme zu einer News anwählen kann.

Nun meine Frage:
Wie speichert man das am besten in die DB?
Ein Array, indem einfach die verschiedenen Systeme hintereinander weg ins Feld eingetragen stehen?

Wie lese ich dieses dann aus, oder besser formuliert, wie suche ich dann nach System X?

Ich hoffe, es klingt nicht zu wirr



Falls es hierzu passt, würde mich auch noch der Bereich Tag-Cloud interessieren, da käme das ja eventuell auch zum Tragen, oder?
 
Gib mal ein Beispiel her.

Generell sollte man in der Datenbank keine Arrays in ein Feld speichern, sondern die Normalformen beachten, dann klappt das auch nachher bei der Arbeit besser.
 
Beispiel wäre bei News:

Spiel X kommt heraus, wird am xx in den Verkauf gegeben

dazu käme dann das Feld Systeme, in dem dann die Systeme reinkämen, zB:

xbox369,ps3,ds,pc

wenn ich aber nun die News sortiert nach System suchen will, müsste ich ja eine DB Anfrage haben, die dann im Feld Systeme sucht, aber irgednwie will mir da nichts einfallen, wie das dann klappt
 
Optimalerweise löst Du die n:m - Beziehung durch eine eigene Tabelle auf.
Also:

Tabelle Spiele:
Spiele-ID | Name | Beschreibung ...

Tabelle Konsolen:
Konsol-ID | Konsole | Beschreibung ...

Tabelle Spiel_Konsole
Spiele-ID | Konsol-ID | ( Erscheinungsdatum | Besonderheit ... )
 
Ergänzend zu transversalis würde das bedeuten, dass du den Eintrag beim Spiel_Konsole "mehrfach" für jedes Spiel hast, jeweils mit der passenden Konsole.

Tabelle Spiele:
Spiele-ID | Name | Beschreibung ...
1 | Zelda | blubb
2 | Mario Kart | blubb blubb

Tabelle Konsolen:
Konsol-ID | Konsole | Beschreibung ...
1 | wii | weißer kastern
2 | ps3 | teuer
3 | xbox360 | RoD

Tabelle Spiel_Konsole
Spiele-ID | Konsol-ID | ( Erscheinungsdatum | Besonderheit ... )
1 | 2
1 | 3

So in der Art.
 

Tabelle Konsolen:
Konsol-ID | Konsole | Beschreibung ...
1 | wii | weißer kastern
2 | ps3 | teuer
3 | xbox360 | RoD

perfekt :ugly: you made my day

zum Rest, da muss ich mal schauen, bisher bastel ich ja erst meinen kleinen Adminbereich zusammen, sprich die Eingabemasken
die Verarbeitung und Speicherung wird dann wohl doch etwas aufwendiger erledigt
 
so, derzeit denke ich mal, dass es so zu lösen ist, hoffe ich zumindest

PHP:
      $sql= "INSERT INTO `berichte` (system, text, bericht, sound, grafik, single, multi, Timestamp ) VALUES ('$system', '$titel', '$bericht', '$sound', '$grafik', '$handling', '$single', '$multi', '".time()."')";
mysql_query($sql);
      $inserted_id = mysql_insert_id();
      $sql2= "INSERT INTO `tagging` (ID, tag1, tag2, tag3, tag4, tag5, tag6) VALUES ($inserted_id, '$tag1', '$tag2', '$tag3', '$tag4', '$tag5', '$tag6')";
mysql_query($sql2);

als Ausleseverfahren habe ich mich dann diesen Scriptes bedient, um die Tags auszulesen und als Tag-Cloud darzustellen:
https://www.ayom.com/faq/tag-cloud-erstellen-a-748.html

und ähnlich, wie bei diesem Beispiel, kann ich ja dann statt Tags eben die Systeme eingeben und auslesen, um die News, wenn für multiple Konsolen, dann in allen Teilbereichen darzustellen
 
kleine Bemerkung am Rande ich würde nicht die PHP funktion mysql_insert_id(); nehmen sonder eher die mysql funktion LAST_INSERT_ID()

also in deinem Fall so:
PHP:
mysql_query("INSERT INTO `tagging` (ID, tag1, tag2, tag3, tag4, tag5, tag6) VALUES (".LAST_INSERT_ID().", '$tag1', '$tag2', '$tag3', '$tag4', '$tag5', '$tag6')";);
 
PHP:
$sql2= "INSERT INTO `tagging` (ID, tag1, tag2, tag3, tag4, tag5, tag6) VALUES ($inserted_id, '$tag1', '$tag2', '$tag3', '$tag4', '$tag5', '$tag6')";
Ist prinzipiell sicherlich so möglich, nur nimmst du dir damit eben selbst die Flexibilität, vielleicht auch mal mehr als sechs Systeme zu verwalten bzw. ein Spiel, das auf mehr als sechs Systemen läuft. Mit transversalis/Cybos Variante hättest du in dieser Hinsicht keinerlei Einschränkungen...
 
das ist eher unwahrscheinlich, es gibt nur 3 Hauptfirmen und daher nur wenige Konsolen

Xbox 360
PS3
PSP
Wii
DS

für mehr Systeme wird ja derzeit nicht entwickelt, wenn dann eine der Firmen im Umbruch zum neuen System steckt, was nie alle auf einmal machen, wird es da kurzweilig vielleicht dann eben zwei Systeme geben, was dann gesamt 6 macht

die Zahl war schon durchdacht *g*
 
Spalten durchnummerieren ist eine Todsünde :roll:

Mach das vernünftig über eine Relationstabelle, ansonsten wirst du noch Bekanntschaft mit dem Query Optimizer machen, da du bei Queries wie "finde alle Berichte mit dem Tag 'XBOX 360'" üble Performance-Einbußen haben wirst (da jedes mal die komplette Tabelle eingelesen werden muss).

Tu dir einen Gefallen und mach es einmal vernünftig. Erspart dir viel Ärger ;)

Greetz

paddya
 
Lösungsvorschläge / Hilfen?

Wenn ich eine besser Lösung bekomme, nutze ich diese gerne
bisher sind ja erst die Eingaben in der Mache, wenn alles fertig ist, wird die Datenbank dann entsprechend aufgesetzt
 
geht nicht um was besseres, ist einfach so, dass ich mit Relatinstabellen noch nicht gearbeitet habe, außer im Shopscript, aber XTC ist in der Hinsicht dermaßen komplex, dass ich mir da keine direkten Anregungen holen könnte
 
Aber wo dein Problem ist, verstehe ich immernoch nicht, in den obigen Posts steht doch eigentlich alles drin. Du hast eine Tabelle, in der du deine Systeme pflegst, mit ID, Name und was auch immer du dir dazu speichern willst.
Gibst du jetzt ein neues Spiel ein, legst du einen Datensatz in der Spiele-Tabelle an, mit ID, Name, Beschreibung, whatever und n Datensätze in der Relations-Tabelle, in denen dann eben jeweils die ID des Spiels, die ID des Systems und ggf. noch ein paar spezifische Details stehen. Wenn du jetzt alle Infos zu einem Spiel suchst, filterst du die Relations-Tabelle nach der ID des Spiels, das dich interessiert und bekommst damit z.B. heraus, auf welchen Systemen es verfügbar ist. Willst du alle Spiele für ein System suchen, filterst du die Relations-Tabelle eben nach der System-ID und bekommst damit alle Spiele-IDs, die mit dieser System-ID verknüpft sind...
 
ok, da kommen die Zusammenhänge mal etwas besser rüber (auch wenn Cybohr das so in etwa nur in gaaaanz kurz auch schon geschrieben hatte)

ich schau mal ...