Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] nächst größere ID

Einklappen

Neue Werbung 2019

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

  • s1x
    hat ein Thema erstellt [Erledigt] nächst größere ID.

    [Erledigt] nächst größere ID

    Hallo,
    ich hab ein banales Problem, hoffe ich doch.

    Und zwar frage ich ab ob dem User die sid zugewiesen ist. Danach soll der nächste Eintrag mit nächst höchsteren ID umgeändert werden, den status auf "1" zu setzen. Das Problem bei der jetzigen Variante ist das er einen belieben Datensatz rausnimmt der höher als der jetztige ist.
    Abzufragen was der nächste autoinc. wert ist funktioniert nicht. Da auch amndere User dort eingetragen werden und diese nicht die gleiche sid haben.
    Ich hoffe soweit verstanden, hier die Abfrage:

    PHP-Code:
    // Nächsten Eintrag vorbereiten
    $db->query("UPDATE stadt_bauschleife_einheiten SET status='1' WHERE sid='$row[sid]' AND id > '$row[id]' LIMIT 1"); 
    Vielen dank, einen schönen Nachmittag noch )

  • robo47
    antwortet
    Zitat von cycap Beitrag anzeigen
    *unterschreib*
    auch unterschreib

    Einge sind sogar Browsergame-Hasser, weil auf manchen Foren, bevorzugt zur Ferienzeit, diese Idee öfters vorkommt und sehr sehr .... sehr selten bis nie was vernünftiges bei rauskommt

    Einen Kommentar schreiben:


  • cycap
    antwortet
    PS: Nicht immer davon ausgehen, dass jeder Progranmmierer automatisch Browsergame-Fan ist.
    *unterschreib*

    Einen Kommentar schreiben:


  • galaxyshadow
    antwortet
    das hab ich gern.. .-sich gedanken um ein query machen und ein fertiges tpl-system nehmen...^^
    machst du dir gedanken um performance??
    -also ich würde den status weglassen, die dinger mit unix-timestamp in die db schreiben und den kleinsten der noch nich abgelaufen is auslesen...
    musst halt vor'm reinschreiben die aktuellen aufträge auslesen und die zeiten berechnen; aber das machst ja sowieso...
    dabei kann man gleich alle verarbeiten (fertigstellen), die mit derselben sid abgelaufen sind
    (sind auch 2 querys, aber is opti wenn man nich die mysql irgwann überlaufen lassen will)

    Einen Kommentar schreiben:


  • Griffith
    antwortet
    Also der SQL-Audruck müsste dann so lauten:
    PHP-Code:
    // Nächsten Eintrag vorbereiten
    $db->query("UPDATE stadt_bauschleife_einheiten SET status='1' WHERE sid='$row[sid]' AND id > '$row[id]' ORDER BY id ASC LIMIT 1"); 
    Und ja, das mitm Status macht eigentlich nur Probleme:
    * du musst es immer updaten
    * du hast unnötig doppelte Daten
    * bei dem oberen Query, musst du auch noch überprüfen, ob es überhaupt ein weiteres Gebäude in der Bauschleife gibt. Schon wieder Mehraufwand.

    Mein Vorschlag wäre:
    Lass die Status-Spalte weg, und ermittle sämtliche Einheiten in der Bauschleife mit diesem Ausdruck:

    "SELECT * FROM stadt_bauschleife_einheiten WHERE sid = '$sid' ORDER BY id ASC"
    bzw. noch mitm Limit 1 hinten dran, wenn du wirklich nur den ersten Eintrag haben möchtest (der der grad aktiv ist).

    Wenn der aktuelle Bauauftrag abgeschlossen ist, dann entfernst du ihn per
    "DELETE FROM stadt_bauschleife_einheiten WHERE sid = '$sid' ORDER BY id ASC LIMIT 1"

    Und vergiss nicht "id" als PRIMARY KEY und für "sid" einen INDEX anzulegen. Das sollte später die Performance etwas erhöhen.

    Einen Kommentar schreiben:


  • Flor1an
    antwortet
    Ich hab keine Ahnung was du meinst. Ich wollte dir nur Erklären dass du dieses Status Feld in der Datenbank NICHT brauchst, auch nicht für JavaScript!

    Einen Kommentar schreiben:


  • s1x
    antwortet
    Hm. Also der Javascriptcounter wird ja dort wiedergegeben wo ein simples Select gemacht wird. Da muss ich ja so oder so die Liste abrufen, und ob ich da jetzt ein [...]

    PHP-Code:
    // Wenn nicht aktiv
    if($row[status] == 1){
        
    $tpl->replace("BAUZEIT",'<var id="count'.$counterindex.'">'.sectodhmsstr($bauzeit).'</var>');
    } else {
        
    $tpl->replace("BAUZEIT",'Warte..');

    [...] mehr oder wenigerhabe ist doch jetzt nicht sonderlich schlim oder?
    Schönen Abend noch.

    PS: Oder habe ich da jetzt etwas falsch verstanden?

    Einen Kommentar schreiben:


  • Flor1an
    antwortet
    Wieso Javascript? Mit Javascript kannst du nicht direkt auf die Datenbank zugreifen. Also wirst du wohl auf irgendwelche Daten zugreifen die du per PHP bereit stellst und deshalb kannst du so oder so auch irgend einen Indikator in HTML schreiben anhand das Javascript dies erkennt.

    Das ist einfach mal wieder ein Fehler im gesamten Design. Du musst Daten doppelt speichern, also kommst du auf mehr Datenbankabfragen, umständliche Abfragen und unnötige Probleme!

    Einen Kommentar schreiben:


  • s1x
    antwortet
    Das ist soweit richtig, das Problem hierbei ist aber das mein Javascriptcounter ansonsten nicht erkennt bei welchem er zählen soll, und bei welchem nicht.
    Gruß s1x

    Einen Kommentar schreiben:


  • Flor1an
    antwortet
    Wieso musst du überhaupt den Status setzen? Es ist doch eh klar dass immer der Bauauftrag mit der niedrigsten ID der aktuelle ist. Daher ist doch die Information "status" überflüssig! Du musst nur überall wo gebaut wird eben dieses LIMIT und die ORDER BY Klausel nutzen! So musst du überhaupt nichts updaten.

    Einen Kommentar schreiben:


  • s1x
    antwortet
    Genau das habe ich jetzt gemacht. Habe gehoff das es in MySQL sowas vielleicht gibt und mir so einen query spare. Trotzdem danke.

    Schönen abend noch.

    Einen Kommentar schreiben:


  • Flor1an
    antwortet
    Wieso selektierst du dann nicht genau EINEN Datensatz WO sid = 1 und SORTIERST absteigend dass eben der erste gefundene Datensatz die kleinste ID hat?? Oder ist das nicht richtig?

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Wieso die erste? Maßgeblich ist doch die erste mit einem bestimmt status? Oder ich habs immer noch nicht verstanden.

    PS: Nicht immer davon ausgehen, dass jeder Progranmmierer automatisch Browsergame-Fan ist.

    Einen Kommentar schreiben:


  • s1x
    antwortet
    Eine Bauschleife kennst du sicher, sie fungiert z.B. in Browsergames dazu um Einheiten zu produzieren, oder Gebäude so das man nicht immer online sein muss.

    3 oder 4 wird genommen weil es sich um sid 1 handelt (Man gehe von dem Standpunkt aus das man die Stadt "1" hat - sprich |sid|-> 1

    Das wäre eine Variante das ist richtig. Ich dachte das es da vielleicht ein SQL Befehl oder Operator oder so gibt. Der den ersten Eintrag in der DB mit der spalte "sid = 1" in diesem Fall abfragt. - Gibt es sowas?

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Wth ist eine "Bauschleife"? Weißer Mann spricht in Rätseln
    Jetzt verständlich?
    Nö. Waum wird da 3 oder 4 genommen?

    Ich rate trotzdem mal in den blauen Dunst: Setze abgearbeitete per UPDATE auf status 0 und suche dann über ein Select LIMIT 1 den ersten Datensatz mit status 1. So sollte es gehen.

    Einen Kommentar schreiben:

Lädt...
X