Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Wie mach ich am geschicktesten die Abfrage

Einklappen

Neue Werbung 2019

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

  • Multiplex
    hat ein Thema erstellt [Erledigt] Wie mach ich am geschicktesten die Abfrage.

    [Erledigt] Wie mach ich am geschicktesten die Abfrage

    Ich habe eine Datenbank, mit vielen Spalten in der zeile filename.

    Mittels
    PHP-Code:
    $sql 'UPDATE numbers 
              SET message = "'
    .$text.'" 
              WHERE filename = "'
    .$filename.'"';

    $res mysql_query($sql); 
    Kann ich wunderbar alle Einträge mit dem selben Text versehen.

    Wie kann ich (vielleicht mit einer Schleife?) meine Datenbank mit zufälligen Text aus dem (dann) $text (Array) befüllen?

  • Multiplex
    antwortet
    OK alles klar, werd ich mir merken.
    Shame on me, weil ich überhaupt eine DB anlege ohne PK.

    Einen Kommentar schreiben:


  • reliC
    antwortet
    kleiner tipp noch:
    wenn du ein projekt mit einer datenbank realisierst dann mach dir erstmal gedanken über deine datenbankstruktur, was wird gebraucht, wie bau ich es ein wie setz ich es um usw usw...dann natürlich noch die normalformen beachten und am besten ein diagramm aufzeichen, dann wird alles viel leichter. Habe das leider am eigenen leib erfahren was eine struktur im vornhinein ausmacht.
    greetz

    Einen Kommentar schreiben:


  • Multiplex
    antwortet
    Ok alles klar vielen Dank,
    ich weiss jetzt auch wo mein Problem war.

    Die Datenbank war sehr schlecht designed.
    Kein Primary Key, und auch keine ID in der DB.

    Nun hab ich das mittels autoincrement und primarykey id gelöst und es klappt.

    Danke nochmals

    Einen Kommentar schreiben:


  • lazydog
    antwortet
    Das heisst auch, dass Filename nicht der Primary Key ist. Da bleibt dir nichts anderes übrig, als in einer Schleife den zugehörigen PK (ich nenne ihn hier wie üblich id) zu holen und die Einträge einzeln zu ändern:
    PHP-Code:
    $sql "
        SELECT
            id
        FROM
            numbers
        WHERE
            filename = '
    $filename'";
    $res mysql_query($sql) or exit(mysql_error());
    while (list(
    $id) = mysql_fetch_row($res)){
        
    shuffle($texte);
        
    $upd "
            UPDATE
                numbers
            SET
                message = '
    $texte[0]'
            WHERE
                id = 
    $id";
        
    mysql_query($upd) or exit(mysql_error());

    Jetzt werden alle mit filename = $filename zufällig geändert.

    Einen Kommentar schreiben:


  • Multiplex
    antwortet
    @florian oder auch alle...

    also:

    ich habe unter dem selben filenamen mehrere einträge stehen

    ich möchte nun jedem einzelnen eintrag eine zufällige nummer aus meinem array zuweisen.

    Anzahl der filenamen ist im normalfall um ein vielfaches größer, als die anzahl der texte aus meinem array, die ich zuordnen will.

    Z.b. 12 db entrys die man unter dem selben namen finden kann (filename) und 4 texte die ich nun 3 mal durchmischen will.

    Einen Kommentar schreiben:


  • reliC
    antwortet
    Zitat von lazydog Beitrag anzeigen
    Es ist ja der gleiche Code wie der von [b]dex[/i] ausser dem shuffle() und dem or exit(mysql_error()). Und so wie ich es jetzt sehe, sind beide gaga, weil sie zwar so oft laufen, wie Einträge in dem Array sind, aber immer den gleichen Eintrag verändern, da ja der PK ($filname) nicht ändert. Deshalb ist Flor1ans Frage völlig berechtigt.

    upps somit ist meine aussage auch nicht ganz korrekt da ich auf das ändern des $filename nicht drauf eingegangen bin ;( sry somit ist die frage wirklich berechtigt.

    Einen Kommentar schreiben:


  • lazydog
    antwortet
    Zitat von Multiplex Beitrag anzeigen
    P.S: Es kann natürlich auch sein, das ich lazydogs code nicht checke,
    aber diese foreach läuft doch nur so lange, wie viele Einträge ich in meinem $texte Array habe, und nicht wieviele Einträge mit $filename es gibt. Oder versteh ich was falsch?
    Es ist ja der gleiche Code wie der von dex ausser dem shuffle() und dem or exit(mysql_error()). Und so wie ich es jetzt sehe, sind beide gaga, weil sie zwar so oft laufen, wie Einträge in dem Array sind, aber immer den gleichen Eintrag verändern, da ja der PK ($filname) nicht ändert. Deshalb ist Flor1ans Frage völlig berechtigt.

    Einen Kommentar schreiben:


  • reliC
    antwortet
    wenn der nutzer das später selber frei wählen kann, kann gib ihm doch einfach ein formular mit einem input type, da trägt er ein wieviele texte er updaten will. Den Value davon übergibst du als variable an die schleife. Die schleife läuft nun solange wie der eingegebene wert vom benutzer ist.

    Aber je nachdem wie ich deine frage hier verstehe ist es doch eher so das der benutzer die texte eingibt oder? wenn du jeden text dann ins array packst, hast du am ende ein gesamtarray mit der länge aller texte die der benutzer eingegeben hat. Das array kannst du dann mit der foreach schleife durchlaufen wie dex es beschrieben hat und updatest dabei einfach.

    Oder habe ich deine frage falsch verstanden?

    Einen Kommentar schreiben:


  • Flor1an
    antwortet
    Was genau möchtest du denn jetzt?

    Es gibt mehrere Einträge die den SELBEN filename haben? Und da möchtest du ALLE Einträge mit EINEM Text aus dem Array überschreiben? Oder was möchtest du genau, ich kann deinen Wunsch nicht aus deiner Fragestellung entnehmen.

    Einen Kommentar schreiben:


  • Multiplex
    antwortet
    WOW

    Vielein Dank für die schnellen und vielen Antworten.

    Also:
    Den Beitrag von dex hab ich gestern Abend noch gelesen, und mir die ganze Nacht überlegt, ob es nicht noch eine Möglichkeit gibt, nicht nocheinmal extra abfragen zu müssen, wie viele Elemente ich updaten muss.

    Bei den anderen beiden Lösungen:

    Ich weiss leider weder wieviele Einträge ich insgesamt updaten muss, und und weiss auch nicht wieviele texte in meinem Array drinnen stehen. Das soll der Benutzer später frei wählen können.

    Müsste ich wohl auf dex's erste Lösung zurückgreifen?


    P.S: Es kann natürlich auch sein, das ich lazydogs code nicht checke,
    aber diese foreach läuft doch nur so lange, wie viele Einträge ich in meinem $texte Array habe, und nicht wieviele Einträge mit $filename es gibt. Oder versteh ich was falsch?

    Einen Kommentar schreiben:


  • lazydog
    antwortet
    Und um einen zufälligen Eintrag zu erhalten, mischtest du einfach zuerst mal den Array:
    PHP-Code:
    shuffle($texte);    // Array mischen
    foreach ($texte as $text) {
        
    $sql "
            UPDATE 
                numbers 
            SET 
                message = '
    $text'
            WHERE 
                filename = '
    $filename'";
        
    $res mysql_query($sql) or exit(mysql_error());

    [Edit]
    Falls du auch mehrere mal den gleichen Eintrag ermöglichen möchtest, musst du das Array innerhalb der Schleife jedesmal neu mischen.

    Einen Kommentar schreiben:


  • dex
    antwortet
    Entschuldige, ich habe ohne zu überlegen einfach drauf zugeschrieben...
    Es gibt natürlich noch eine besser und einfachere Lösung:
    PHP-Code:
    $text = array("Text1","Text2");

        foreach (
    $text as $key) {
            
    $sql 'UPDATE numbers 
                    SET message = "'
    .$key.'"
                    WHERE filename = "'
    .$filename.'"';
            
    $res mysql_query($sql);
        } 

    Einen Kommentar schreiben:


  • dex
    antwortet
    Ganz einfach: Lass eine Variable hochzählen...

    PHP-Code:
    $text = array("","Text1","Text2",...);

    $i 2// Anzahl der Texte
    while($i 0)
         {
         
    $sql 'UPDATE numbers 
                 SET message = "'
    .$text[$i].'"
                 WHERE filename = "'
    .$filename.'"';
         
    $res mysql_query($sql);
         
    $i--;
         } 

    Einen Kommentar schreiben:

Lädt...
X