query, ausgabe und variablen

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

  • query, ausgabe und variablen

    Hallo,

    ich habe zwei Fragen. Ich sitze gerade dabei ein Newssystem zu programmieren, bin aba blutiger Anfäger, aber lernbereit.

    1. ich schreibe newskategorien und themen in die gleiche tabelle _news, unterscheide dabei nur mit art(int(1)) ob kategorie oder newstitel. ich weiß das es anders leichter ginge, aber ich will das eben auch aus lernzwecken so probieren. die direkte ausgabe mit echo(""); ist kein problem, zuerst werden mir die kategorien gemäß kriterien angezeigt, dann die newstitel der jeweiligen kategorie (Beides in einer Schleife). nun will ich aber beides gerne mit einer Variable ansprechen und im Dokument dort platzieren, wo es mir beliebt. da aber streikt mein vorhaben.

    2. ich möchte gerne commentautoren in ein der tabelle _news schreiben, damit man die bisherigen kommentatoren extra auflisten kann (zusätzlich werden natürlich datensätze bei _comments angelegt). zwar geht auch das leichter, ist mir bekannt, aber auch hier der lerneffekt. im prinzip müsste man die autorenid der benutzertabelle in ein feld mittels kommatrennung einfügen können, danach bei der ausgabe wieder auseinander nehmen können, um daraus dann die benutzertabelle durchsuchen zu können

    bspw:

    UPDATE news SET autoren=autoren,".$neueid" WHERE [...]

    (Der query muss höchstwahrscheinlich angepasst werden wie ich meine)

    und ausgabe dann irgendwie den inhalt von news.autoren (bspw. 2,5,12,18,22 - alles benutzerid'S) wieder zerlegen in einzelne zahlen.

    sind meine vorhaben irgendwie machbar? oda habe ich nen denkfehler?

  • #2
    Re: query, ausgabe und variablen

    Original geschrieben von .raDDadil
    1. ich schreibe newskategorien und themen in die gleiche tabelle _news, unterscheide dabei nur mit art(int(1)) ob kategorie oder newstitel. ich weiß das es anders leichter ginge, aber ich will das eben auch aus lernzwecken so probieren.
    Also zu Lernzwecken erst mal den ungünstigeren - man könnte auch sagen, falschen - Weg gehen ...?
    die direkte ausgabe mit echo(""); ist kein problem, zuerst werden mir die kategorien gemäß kriterien angezeigt, dann die newstitel der jeweiligen kategorie (Beides in einer Schleife). nun will ich aber beides gerne mit einer Variable ansprechen und im Dokument dort platzieren, wo es mir beliebt. da aber streikt mein vorhaben.
    Wo liegt das Problem?

    Statt direkt mit echo rauszupusten, hängst du den jeweiligen Eintrag an eine String-Variable an.

    2. ich möchte gerne commentautoren in ein der tabelle _news schreiben, damit man die bisherigen kommentatoren extra auflisten kann (zusätzlich werden natürlich datensätze bei _comments angelegt). zwar geht auch das leichter, ist mir bekannt, aber auch hier der lerneffekt. im prinzip müsste man die autorenid der benutzertabelle in ein feld mittels kommatrennung einfügen können, danach bei der ausgabe wieder auseinander nehmen können, um daraus dann die benutzertabelle durchsuchen zu können
    Also schon wieder zu "Lernzwecken" einen blödsinnigen Ansatz verfolgen ...?

    Mein Rat: Lass den Quark.

    Beschäftige dich gleich von Anfang an mit vernünfitger Normalisierung.
    http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      hallo, ich werde deine ratschläge mit sicherheit befolgen. und doch bin ich ein typ, der gerne auch komplexe dinge verstehen möchte, um lernen zu können.

      zu 1:
      leider ist dem nicht so, wenn ich das mache, werden mir von den newstitle's nur jeweils ein eintrag der jeweiligen kategorie angezeigt.

      folgender aufbau:

      query kategorie
      fetch kategorie
      while
      {
      query newstitel
      fetch newstitel
      while
      {
      newstitel
      }
      kategorie
      }

      habe ich hier einen denkfehler?

      zu 2:

      wie sähe aber denn mein beispiel aus, um das zu begreifen?

      vielen dank bisher

      Kommentar


      • #4
        query kategorie
        fetch kategorie
        while
        {
        query newstitel
        fetch newstitel
        while
        {
        newstitel
        }
        kategorie
        }
        Was ?

        Poste doch lieber deinen richtigen Quelltext. Gerne in [PHP]-Tags, aufs Wesentliche gekürzt und ohne Überbreite.

        Zu deinen Tabellen: Beschäftige dich mal mit dem Stichwort "Normalisierung". Auch, wie man die Tabellen richtig aufbaut, was man in welche schreibt usw. muss man erst lernen. Daher ist es schon sinnvoller, es beim Lernen gleich richtig zu machen.

        Zu deinem Beispiel: Ich würde eine Tabelle für die Kommentatoren, eine für die News und eine mit Comments (Comment-id, Kommentator id, News id, Text, Zeitpunkt) machen.

        Edit:
        die autorenid der benutzertabelle in ein feld mittels kommatrennung einfügen können, danach bei der ausgabe wieder auseinander nehmen können, um daraus dann die benutzertabelle durchsuchen zu können
        Wenn du das Zerlegen von Strings üben möchtest, dann such dir lieber ein anderes Beispiel. Das was du da beschreibst, ist sicher kein guter Stil und anders viel besser zu lösen, das ist mit dem Lerneffekt nicht zu rechtfertigen.
        Zuletzt geändert von ministry; 27.06.2007, 16:32.
        ich glaube

        Kommentar


        • #5
          Original geschrieben von .raDDadil
          zu 1:
          leider ist dem nicht so, wenn ich das mache, werden mir von den newstitle's nur jeweils ein eintrag der jeweiligen kategorie angezeigt.
          Dann hast du in der Schleife vermutlich den jeweils aktuellen Wert nicht an eine Variable angehangen, sondern die Variable überschrieben.
          zu 2:

          wie sähe aber denn mein beispiel aus, um das zu begreifen?
          Dazu müsste erst mal eine Problembeschreibung kommen, die man "begreifen" kann. Bei dem, was du ursprünglich als zweite Frage gepostet hast, gelang mir das mit vertretbar erscheinender Anstrengung leider nicht.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            vielen dank vorab für die antworten.

            zu 2: wie kann ich z.b. folgenden string zerlegen:

            PHP-Code:
            $string_inhalt $fetch['feld_einer_tabelle_mit_zahlen_von_kommata_getrennt'];
            $string $string_inhalt// < diesen hier 
            und zwar so, das nach jedem Komma mir eine Zahl zur Verfügung steht die ich weiter verarbeiten kann, die nach den Kommas eingetragen wurde. bspw. sieht der inhalt des felds so aus:

            Code:
            1,3,7,17,18,22,87
            also, es soll auch die tatsächliche zahl erhalten bleiben, nicht das, 87 sich z.b. in einmal 7 und einmal 8 zerlegt, sondern wirklich 87 daraus macht.

            zu 1:

            PHP-Code:
            $query mysql_query("SELECT * FROM inhalt WHERE art='1'");
            while(
            $fetch mysql_fetch_array($query)
            {
            $query_sub mysql_query("SELECT * FROM inhalt WHERE art='2' AND artid='".$fetch['id']."'");
            while(
            $fetch_sub mysql_fetch_array($query_sub)
            {
            echo(
            "[...]sub[...]");
            }
            echo(
            "[...]main[...]");

            aus der gleichen tabelle sollen sowohl kategorien als auch news der kategorien ausgelesen werden. art=1 ist die kategorie, und zu dieser kategorie sollen dann in der zweiten schleife die news ausgesucht werden. mit echo klappt das anstandslos, in eine variable packen kann ich das jedoch nicht, da ich dann jeweils nur ein ergebnis der jeweiligen kategorie geliefert bekomme. nehmen wir an, ich habe drei kategorien und darunter teilen sich etwas 30 news / inhalte auf. und nochmal, ich weiß das es leichter und besser geht, ich versuche diesen weg zu lösen, um auch komplexe operationen verstehen zu können.

            Kommentar


            • #7
              Zu 1.: explode()
              Wie gesagt, das ist keine praktikable Lösung! Sobald du versuchst, mehr als einen Wert in ein Feld zu speichern, ist was an deinem db-design faul. Das String-Zerlegen kannst du mit anderen Sachen üben wenn es darum geht.


              Zu 2: Das ist auch nicht ideal. Querys in Schleifen werden schnell zum Performancekiller. Und unterschiedliche Sachen gehören in verschiedene Tabellen.

              Selektiere
              Alles von News
              LEFT JOIN kategorien
              Ordne nach Kategorien.

              Dann hast du eine Schleife mit allen News und den Kategorien dazu. Sobald sich die Kategorie ändert, bist du in der nächsten und kannst die Kategorieüberschrift ausgeben, ansonsten nur die News. Das nennt man Gruppenwechsel.
              ich glaube

              Kommentar


              • #8
                Original geschrieben von ministry
                Zu 1.: explode()
                Wie gesagt, das ist keine praktikable Lösung! Sobald du versuchst, mehr als einen Wert in ein Feld zu speichern, ist was an deinem db-design faul. Das String-Zerlegen kannst du mit anderen Sachen üben wenn es darum geht.


                Wenn ich nun bspw. folgendes mache:

                PHP-Code:
                $string explode(","," "$string); 
                dann habe ich meine zahlen hübsch zerlegt. nun stellt sich mir aber die frage, wie ich diese zahlen nun in einen string (array?) packen kann, der dann einen wert in einer anderen tabelle prüft; wenn ein wert der zahlen übereinstimmt mit einem wert von wasweißich, dann soll man machen dürfen, wenn nicht, dann access_error (ich drücke mich sicherlich n00bisch aus, aber versucht mich zu verstehen )

                Original geschrieben von ministry
                Zu 2: Das ist auch nicht ideal. Querys in Schleifen werden schnell zum Performancekiller. Und unterschiedliche Sachen gehören in verschiedene Tabellen.

                Selektiere
                Alles von News
                LEFT JOIN kategorien
                Ordne nach Kategorien.

                Dann hast du eine Schleife mit allen News und den Kategorien dazu. Sobald sich die Kategorie ändert, bist du in der nächsten und kannst die Kategorieüberschrift ausgeben, ansonsten nur die News. Das nennt man Gruppenwechsel.
                Vielen Dank für diesen Hint, ich werde das versuchen was mit sicherheit auch funktionieren wird. damit ich nun begreife, wo liegt denn der fehler in meinem code? warum, auch wenn er nicht wirklich gut ist, stellt er nicht dar was er darstellen soll?

                Kommentar


                • #9
                  Zu 1:

                  Dann kannst du es auch gleich so lassen.
                  PHP-Code:
                  "SELECT bla FROM blub WHERE blub_id IN(" $deinstringmitdenkommata ")" 
                  Ansonsten gibt es analog zu explode auch implode() , wer hätte das gedacht.

                  Zu 2.:

                  Was du mit der Variable machst zeigst du ja nicht. Du kannst doch einfach einen String nehmen $ausgabe = ''; und überall in den beiden Schleifen anstatt Ausgabe mit echo hängst du die Daten mit $ausgabe .= ... dran.

                  Außerdem: - Wenn du sowieso nur die ID brauchst, dann selektiere auch nur die, und nicht "*"
                  - Zahlen sollen nicht in Anführungszeichen. MySQL ist schlau genug, trotzdem zu kapieren was du meinst, aber richtig ist es ohne.
                  ich glaube

                  Kommentar


                  • #10
                    zu 1:

                    kann ich ja eben nicht

                    diese zahlenfolge ändert sich und bleibt nicht immer die gleiche. lediglich eine zahl des tabellen-feldes, wo um (sagen mir mal) einlass gebeten wird, soll verglichen werden mit einer zahl eines benutzer_feldes (wo durchaus auch mehrere drin stehen können). wenn eine zahl davon übereinstimmt, mit einer eingetragenen zahl von _benutzer, dann soll user drauf zugreifen können, andernfalls nicht.

                    zu 2:

                    die variablen platziere ich in templates

                    $main
                    $sub



                    ihr wisst nicht wie dankbar ich bin, und das sollt ihr nicht schleimend interpretieren. ich weiß sehr wohl das es mühsam sein kann zu unterstützen, auch wenn das gegenüber sich nicht sehr kooperativ im verständnis zeigt. danke.

                    EDIT

                    kann ich zu 1 das z.b. so machen?

                    PHP-Code:
                    $array = array($fetch['feld_mit_zahlen_getrennt_durch_kommas']);
                    $string explode(","," "$array); 
                    so das ich dann prüfen kann:

                    PHP-Code:
                    if(in_array($string))==$einzahlenwert)
                    {
                    ausführen
                    }
                    else
                    {
                    error

                    ?
                    Zuletzt geändert von .raDDadil; 27.06.2007, 17:33.

                    Kommentar


                    • #11
                      diese zahlenfolge ändert sich und bleibt nicht immer die gleiche. lediglich eine zahl des tabellen-feldes, wo um (sagen mir mal) einlass gebeten wird, soll verglichen werden mit einer zahl eines benutzer_feldes (wo durchaus auch mehrere drin stehen können). wenn eine zahl davon übereinstimmt, mit einer eingetragenen zahl von _benutzer, dann soll user drauf zugreifen können, andernfalls nicht.
                      Sorry, bitte nochmal neu erklären. Kein Wort verstanden.

                      ..kann ich das so machen?
                      $array = array($fetch['feld_mit_zahlen_getrennt_durch_kommas']);
                      $string = explode(","," ", $array);
                      Ne, wo hast du das denn her? Mal im manual bei explode geguckt?

                      PHP-Code:
                      $array explode(","$fetch['feld...']); 
                      Was soll dann ausgeführt werden?

                      Zu 2: Und? Problem liegt wo?
                      ich glaube

                      Kommentar


                      • #12
                        zu 1:

                        wenn der inhalt meines feldes bspw. so aussieht:

                        Code:
                        1,4,33,92,5
                        und ich folgenden code anwende:

                        PHP-Code:
                        $array explode(","$fetch['feld]); 
                        Habe ich dann jede zahl einzeln in diesem array drin? so das ich damit weiterarbeiten kann? z.b. soll in einer newskategorie gruppenID's stehen, die news verfassen können (bsp. oben: 1,4,33,92,5) diese fünf gruppen dürften also news verfassen. nun aber soll ein userquery prüfen, welche gruppen user angehört. nachdem soll mittels if geprüft werden, ob gruppenid's übereinstimmen und dementsprechend einlass gewähren.

                        code für weiterverarbeitung dann so?

                        PHP-Code:
                        if(in_array($array))==$einzahlenwert)
                        {
                        ausführen
                        }
                        else
                        {
                        error

                        zu 2:

                        problem liegt daran, das die kateogiren ausgegeben werden, aber zu jeder kategorie nur ein eintrag von news, obwohl sich mehrere news in den jeweiligen kategorien befinden.

                        Kommentar


                        • #13
                          Zu 1.:

                          Probiers halt aus - mit var_dump($array) siehst du ja, was drinsteht. Und im manual steht es auch richtig drin.
                          Wie die Syntax von in_array lautet, wolltest du dir bei dieser Gelegenheit auch gleich noch angucken. Ein bisschen Hausaufgaben müssen ja sein, schließlich willst du das ja lernen

                          Zu 2.:

                          Dann zeig mal her was du da machst. Es wird wohl so sein wie schon Wahsaga vermutet hat, dass du den String immer überschreibst.
                          ich glaube

                          Kommentar


                          • #14
                            zu 1:

                            begriffen habe ich nun, dank deiner hilfe, folgendes:

                            PHP-Code:
                            $arrayvari = array("1","4","33","92","5");

                            if(
                            in_array("7"$arrayvari))
                                {
                                echo(
                            "kk");
                                }
                                else
                                {
                                echo(
                            "kackb00n");
                                } 
                            ausgabe "kackb00n" (Weiß ja jeder wer gemeint ist damit).

                            nun habe ich jedoch das problem meinen feldwert von 1,4,33,92,5 so zu formatieren, das er dann auch vom array genommen und verarbeitet wird. wenn ich den feldwert wie er ist in den array packe, streikt das script. auf der anderen seite muss ich aber die zahlen mit irgendwas trennen, damit die ziffern nicht verschnelzen (sind ja individuelle gruppenid's).

                            zu 2:

                            es ist haargenau (bis auf die daten) so wie hier im bsp.

                            PHP-Code:
                            $query mysql_query("SELECT * FROM inhalt WHERE art='1'");
                            while(
                            $fetch mysql_fetch_array($query)
                            {
                            $query_sub mysql_query("SELECT * FROM inhalt WHERE art='2' AND artid='".$fetch['id']."'");
                            while(
                            $fetch_sub mysql_fetch_array($query_sub)
                            {
                            eval(
                            $main[...]templatename_main);
                            }
                            eval(
                            $sub[...]templatename_sub);

                            die beiden varis werfe ich dann in das template main_index bspw.

                            Kommentar


                            • #15
                              Zu 1.:
                              begriffen habe ich nun...
                              Wundervoll

                              - Integers gehören immer noch nicht in Anführungszeichen...
                              - explode, wie schon erwähnt ?

                              Zu 2: Was soll denn jetzt eval da noch drin? Was ist denn das für eine Templateengine? Kannst du der keine Arrays übergeben?
                              ich glaube

                              Kommentar

                              Lädt...
                              X