Ankündigung

Einklappen
Keine Ankündigung bisher.

Datenbank-Spalte + Datenbank-Wert ausgeben (komplex)

Einklappen

Neue Werbung 2019

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

  • Datenbank-Spalte + Datenbank-Wert ausgeben (komplex)

    Moin,

    Ich weiss nicht recht wie ich diese SQL-Abfrage machen kann...

    Tabelle "section" besteht insgesamt aus 38spalten mit unterschiedlichen namen, welche durch ein radiobutton-formular geupdatet werden (nein=0, ja=1)
    id (autoincrement) userid (index) lkw_fahren traktor_fahren auto_fahren
    1 1112 1 1 1
    2 1125 1 1 0
    3 1130 1 0 1





    lkw_fahren, traktor_fahren, auto_fahren ist in der Datenbank int(1), da würde boolean (true/false) mehr sinn machen? oder wie würdet ihr das speichern?

    Mein testen:
    if(isset($_GET["userid"])){
    //cast to int
    $userid = intval($_GET["userid"]);
    ...
    SELECT section.userid, section.lkw_fahren, section.traktor_fahren, section.auto_fahren FROM section WHERE userid = $userid AND lkw_fahren= 1 OR traktor_fahren = 1 OR auto_fahren = 1
    habe schon gegoogelt z.B. mit ANY oder UNION 2-select abfragen usw...

    ich will danach dass ich mit PHP sowas ausgeben

    bei userid = 1112:
    lkw_fahren 1
    traktor_fahren 1
    auto_fahren 1
    bei userid = 1125:
    lkw_fahren 1
    traktor_fahren 1
    bei userid = 1130:
    lkw_fahren 1
    auto_fahren 1
    wenn keine "1" sind, keine Ausgabe.

    Ich dachte, dass für die Datenbank diese Struktur am besten ist, weil es sonst ja sehr viele Einträge gibt für nur 1 user... bei 300 User welche 10 Aufgaben haben sind das ja schon 3000Einträge usw..., während die Abfrage zunehmend langsamer wird

    als wenn z.B. sowas wäre:
    id - userid - activity
    1 - 1112 - 1
    2 - 1112 - 2
    3 - 1112 - 3
    4 - 1125 - 1
    5 - 1125 - 2
    6 - 1130 - 1
    7 - 1130 - 3
    mh wie speichert man soviel + verarbeitet soviel blos?

    Danke für eure Hilfe!

    Gruss newsletter

  • #2
    Zitat von newsletter Beitrag anzeigen

    Ich dachte, dass für die Datenbank diese Struktur am besten ist,
    nein, ist sie nicht.
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      Zitat von akretschmer Beitrag anzeigen

      nein, ist sie nicht.
      Naja, wie würdest du sowas machen?

      Mehrere Einträge pro User, sowas:
      id - userid - activity
      1 - 1112 - 1
      2 - 1112 - 2
      3 - 1112 - 3
      4 - 1125 - 1
      5 - 1125 - 2
      6 - 1130 - 1
      7 - 1130 - 3

      Oder 1 Eintrag pro User und unter activity 1,2,3...

      Kommentar


      • #4
        Genau. id, userid, activity (oder activityid). Dazu eine Activity-Tabelle in welcher du die Aktivitäten ablegst. Anschliessend kannst du mit einem einfachen Join Deine Ausgabe generieren.

        Kommentar


        • #5
          3000 Einträge sind für die DB nicht viel, selbst 3 Millionen machen da noch keinen Unterschied. Besser du machst eine 2.Tabelle für die Eigenschaften und nimmst eine Spalte User_id für die Verbindung zu der user Tabelle.

          Die Abfrage machst du dann mit einem Left Join.

          Mal dir das am Besten erst man auf einen Blatt auf, vielleicht fällt dir ja noch mehr ein was du speichern möchtest.

          Kommentar


          • #6
            das ganze noch gut mit Foreign Keys und passenden Indexen würzen ...
            PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

            Kommentar


            • #7
              Die bestehende Struktur ist doch noch vollkommen ok für den Anwendungsfall. So wie ich das verstanden habe, besteht nur ein Problem bei der Ausgabe?
              Jedenfalls könnte man die gewünschte Ausgabe entweder per PHP oder bereits im SQL per Pivot und Filter erledigen.

              Für mich stellt sich hauptsächlich die Frage, wie variabel die Attribute sind. Wie oft werden da neue hinzugefügt oder welche weggenommen wodurch sich Änderungen am Schema ergeben würden, wenn man sie als Spalten behalten würde.
              [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
              [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

              Kommentar


              • #8
                Zitat von jonas3344 Beitrag anzeigen
                Genau. id, userid, activity (oder activityid). Dazu eine Activity-Tabelle in welcher du die Aktivitäten ablegst. Anschliessend kannst du mit einem einfachen Join Deine Ausgabe generieren.
                Im Zweifel ist man hier aber auch 61 Eigenschaften begrenzt, denn mehr JOINs erlaubt MySQL nicht pro Abfrage.

                Kommentar


                • #9
                  Ein Join reicht doch um die Ausgabe in #1 zu generieren.

                  Kommentar


                  • #10
                    Zitat von VPh Beitrag anzeigen
                    Für mich stellt sich hauptsächlich die Frage, wie variabel die Attribute sind. Wie oft werden da neue hinzugefügt oder welche weggenommen wodurch sich Änderungen am Schema ergeben würden, wenn man sie als Spalten behalten würde.
                    Daher #2.
                    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                    Kommentar


                    • #11
                      Zitat von jonas3344 Beitrag anzeigen
                      Ein Join reicht doch um die Ausgabe in #1 zu generieren.
                      War darauf Bezogen wenn man die Ausgabe wie in der Tabelle #1 Abfragen möchte.

                      Kommentar

                      Lädt...
                      X