mysql-herausforderung fürs forum?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • mysql-herausforderung fürs forum?

    etwas kompliziert. aber ich hoffe, ihr habt eine lösung für mich...

    folgende situation.

    ich habe zwei tabellen, die miteinander verbunden sind. ( navigation + content )
    content besitzt noch eine referenz zur tabelle ( contenttype )

    soweit ist das auch noch ganz einfach.

    bisher hatte ich das so gemacht, dass ich der tabelle content auch alle contentinformationen enthalten sind. da ich aber verschiedenste type an content benötige ( text / image / list ) habe ich mir für jeden dieser typen eine eigene contenttabelle angelegt.

    wenn ich den inhalt einer seite nun anzeigen lassen will, gehe ich wie folgt vor.

    - tabelle content auslesen. (nur die werte, die auch mit der navigation 'verbunden' sind.)

    - derzeitig werte ich nun den contenttype aus und mache ein neues select auf die entsprechende contenttabelle (im moment eine der drei [text|image|list])

    zur info.

    jede dieser drei tabellen besitzt eine andere struktur. ich wollte es vermeiden alle felder in eine tabelle zu schreiben, da die felder, die für einen bestimmten typ nicht notwendig sind, ungenutzt wären.


    kann man das noch einfacher mit EINER sql-anfrage machen?
    oder habe ich nur einen denkfehler in meiner DB-struktur gemacht?
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |



  • #2
    leute. ich bin enttäuscht von euch ....

    naja. ich habe dafür nun selbst eine lösung entworfen.

    in jede der drei extra-tabellen habe ich eine spalte hinzugefügt, in der die id der tabelle content enthalten ist.

    nun kann ich einen select mit vielen joins machen, die immer der id der tab content entsprechen.

    wenn ich nun in einer tabelle keinen inhalt habe für text/image/list , so steht in der sql-query dann logischerweise NULL. da ich aber über die typid weiss, worum es sich handelt, kann ich auch die entsprechenden spaltennamen auslesen. diese sind ja bekannt.

    hier auch noch zum verständnis die sql-query. damit geht es ohne probleme.


    PHP-Code:
        $sql "SELECT * FROM Content";
        
    $sql.= " LEFT OUTER JOIN Content_Text  ON Content.ContentId = Content_Text.ContentId";
        
    $sql.= " LEFT OUTER JOIN Content_Image ON Content.ContentId = Content_Image.ContentId";
        
    $sql.= " LEFT OUTER JOIN Content_Table ON Content.ContentId = Content_Table.ContentId";
        
    $sql.= " WHERE Content.NaviId = '".$pageid."'";
        
    $sql.= " AND Deleted != 'Y'";
        
    $sql.= " ORDER BY Sort"
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Uff!!!

      Ich hab jetzt ein bisschen Probleme, mir deine Tabellen vorzustellen. Das ist on-the-flow in bisschen viel.

      Hab mir aber dein gepostetes Query angesehen. Das sieht soweit schon mal nicht schlecht aus. Ich wüsste jetzt nicht, was man verbessern könnte.

      Ohne die Spalte ContentId wäre es gar nicht gegangen, oder?

      Fazit: Ich würds so lassen.

      Kommentar


      • #4
        richtig. ohne die neue spalte in den drei tabellen würde es nicht gehen.

        danke dir, dass du es auch so machen würdest. ich habe nämlich gestern den ganzen tag nach einer optimalen lösung gegrübelt... )

        ich habe dir mal ne ausgabe beigefügt, damit du dir es (zumindest im nachhinein) noch besser vorstellen kannst...

        Code:
        +-----------+--------+-------+------+---------+--------+-----------+----------------+----------------------------------------------------------------+---------+-----------+------------------+-----------+-----------+----------------------+---------------+------------+-------------+-------------+------------+----------+---------+-----------+---------+---------+---------+---------+---------+
        | ContentId | NaviId | TypId | Sort | Deleted | TextId | ContentId | ContentHead    | Content                                                        | ImageId | ContentId | ImageFile        | ImageDesc | ImageData | ImageFileType        | ImageFileSize | ImageWidth | ImageHeight | ImageBorder | ImageAlign | ImageAlt | TableId | ContentId | Columns | Column1 | Column2 | Column3 | Column4 |
        +-----------+--------+-------+------+---------+--------+-----------+----------------+----------------------------------------------------------------+---------+-----------+------------------+-----------+-----------+----------------------+---------------+------------+-------------+-------------+------------+----------+---------+-----------+---------+---------+---------+---------+---------+
        |        54 |    239 |     2 |    0 | N       |   NULL |      NULL | NULL           | NULL                                                           |      21 |        54 | abraxax_neu1.jpg |           | {DATA}    | image/pjpeg          |         14530 |        360 |         314 |           0 | left       |          |    NULL |      NULL |    NULL | NULL    | NULL    | NULL    | NULL    |
        |        12 |    239 |     1 |    0 | N       |     19 |        12 | head markus    | text markus                                                    |    NULL |      NULL | NULL             | NULL      | NULL      | NULL                 |          NULL |       NULL |        NULL |        NULL | NULL       | NULL     |    NULL |      NULL |    NULL | NULL    | NULL    | NULL    | NULL    |
        |        13 |    239 |     1 |    0 | N       |     20 |        13 |                | klök öllk ö-kö-k -ölkölk ölk poi poiäpoiipoi opipoipäi po äioä |    NULL |      NULL | NULL             | NULL      | NULL      | NULL                 |          NULL |       NULL |        NULL |        NULL | NULL       | NULL     |    NULL |      NULL |    NULL | NULL    | NULL    | NULL    | NULL    |
        |        14 |    239 |     1 |    0 | N       |     21 |        14 | überscgggggggg | über tralalas                                                  |    NULL |      NULL | NULL             | NULL      | NULL      | NULL                 |          NULL |       NULL |        NULL |        NULL | NULL       | NULL     |    NULL |      NULL |    NULL | NULL    | NULL    | NULL    | NULL    |
        |        15 |    239 |     1 |    0 | N       |     22 |        15 | überscgggggggg | über tralalas                                                  |    NULL |      NULL | NULL             | NULL      | NULL      | NULL                 |          NULL |       NULL |        NULL |        NULL | NULL       | NULL     |    NULL |      NULL |    NULL | NULL    | NULL    | NULL    | NULL    |
        +-----------+--------+-------+------+---------+--------+-----------+----------------+----------------------------------------------------------------+---------+-----------+------------------+-----------+-----------+----------------------+---------------+------------+-------------+-------------+------------+----------+---------+-----------+---------+---------+---------+---------+---------+
        6 rows in set (0.03 sec)
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          Wenn ich das so sehe, sieht deine Lösung wirklich ideal aus.

          BTW: Bist du jetzt auch unter die CMSler gegangen?

          Kommentar


          • #6
            jepp. ich bastel noch .... ist aber nix dolles.

            sieht aber schon ganz gut aus.

            wenn du lust hast, kannste dir das mal anschauen. wenn ja, schicke ich dir die url via mail oder pm.
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              PM gibts leider nur für die Mods und Admins.

              Aber eine Mail könntes du mir gerne mal schicken: contactme@ http://tobiweb.net // Klick das große Bild! <---

              Kommentar


              • #8
                mail ist raus..
                INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                Kommentar

                Lädt...
                X