Stapelverarbeitung bei $_POST & ein Verständnisproblem

  • Stapelverarbeitung bei $_POST & ein Verständnisproblem

    Hi,

    ...SPLIT...

    Ein anderes Problem, dass ebenfalls wohl eher ein logisches ist:

    in die Tabelle werden diese Daten geschrieben:
    id, package_id, source_code, source_group, title, description.

    Sähe dann so aus:

    Quellcode

    1. 1, 1, 1, "headline", "english title", ""
    2. 2, 2, 1, "headline", "deutscher titel", ""
    3. 3, 1, 2, "headline", "english description", ""
    4. 4, 2, 2, "headline", "deutsche beschreibung", ""


    id ist der index.
    package_id, ist der index des Sprachpaketes und soll anhand des Suffix übergeben werden (title[0], title[1]) + 1.
    source_code ist die id für das Alias
    source_group ist die Gruppe* innerhalb derer das Alias zur Verfügung steht.
    Description ist optional.

    Ich weiß nicht, wie ich ermitteln kann, ob ein source_code schon belegt ist. Auf "unique" kann ich das nicht setzen. Sonst müsste die Tabelle "gedreht" werden, indem ich für jedes Sprachalias einfach ein neues Feld hinzufüge. Die Aliase müssen in einer eigenen Zeile stehen. Für jede Gruppe wird beginnend ab "1" der source_code neu gezählt.
    Wie lass ich die source_id innerhalb einer Gruppe, ähnlich wie bei einer index_id, "nach oben klettern"?




    *Die Daten werden später als XML ausgegeben und in einem Flashfilm weiterverarbeitet. Der Gruppenname definiert Komponenten innerhalb des Flashfilms.


    Tabellen:

    Quellcode

    1. CREATE TABLE `language_packages` (
    2. `id` int(10) unsigned NOT NULL auto_increment,
    3. `lang` varchar(2) collate latin1_german1_ci NOT NULL,
    4. `title` varchar(15) collate latin1_german1_ci NOT NULL,
    5. `path` varchar(250) collate latin1_german1_ci default NULL,
    6. `description` text collate latin1_german1_ci NOT NULL,
    7. PRIMARY KEY (`id`),
    8. UNIQUE KEY `lang` (`lang`,`title`,`path`),
    9. FULLTEXT KEY `description` (`description`)
    10. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci AUTO_INCREMENT=1 COMMENT='package for language settings' ;
    11. CREATE TABLE `language_files` (
    12. `id` int(10) unsigned NOT NULL auto_increment,
    13. `package_id` int(10) NOT NULL default '1',
    14. `source_code` int(10) NOT NULL,
    15. `source_group` varchar(20) collate latin1_german1_ci NOT NULL,
    16. `title` varchar(1000) collate latin1_german1_ci default NULL,
    17. `description` text collate latin1_german1_ci NOT NULL,
    18. PRIMARY KEY (`id`),
    19. FULLTEXT KEY `description` (`description`)
    20. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci AUTO_INCREMENT=1 COMMENT='files for laguagepackages';
    Alles anzeigen





    Vielen Dank für eure Zeit.

    lg icronosonic
  • Das Problem ist, dass ich nicht weiß, wie ich ermittle, ob ein source_code schon da ist.

    Ich dachte an sowas:

    Suche den übergebenen Wert der $source_group in der Spalte "source_group" in der Tabelle "language_files".
    Gugg, was die größte Zahl in der spalte "source_code" innerhalb dieser Gruppe ist.
    Addiere 1 dazu.
    Schreibe das Alias für alle Sprachen unter des eben festgelegten neuen "source_codes".

    Wie schreibt man sowas in eine Funktion? Weiß grad nicht weiter.
  • icronosonic schrieb:

    Gugg, was die größte Zahl in der spalte "source_code" innerhalb dieser Gruppe ist.

    Also source_code und gruppe kannst du schonmal UNIQUE machen.

    Ein auto_increment kannst du so aber nicht realisieren. Vermutlich hast du dein Datenbankdesign nicht bis in die 3te Normalform gebracht.
    Wenns zu spät ist, kannst du das aber auch wie du geschildert hast programmiererisch umsetzen.

    SELECT MAX (source_code) FROM tabelle WHERE gruppe = param;
    INSERT INTO tabelle (source_code) VALUES ($var+1);