Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Typnummer Generator

Einklappen

Neue Werbung 2019

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

  • robydog
    antwortet
    Zitat von nikosch Beitrag anzeigen
    Nein. Rechenop's mit einem INT-Typ erzeugen immer INT-Typen. Aber mit $char++; funktionierts.
    also bei mir funktioniert das nich

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Ich bin mir nicht sicher, kann es auch nicht testen, aber erhaelst du mit folgender Ausgabe eine Dezimalzahl oder vielleicht sogar schon das B?
    echo 'A' + 1;
    Nein. Rechenop's mit einem INT-Typ erzeugen immer INT-Typen. Aber mit $char++; funktionierts.

    Einen Kommentar schreiben:


  • bratkartoffel
    antwortet
    Zitat von Sirke Beitrag anzeigen
    Bestehen deine Typnummern als IMMER aus vier Blöcken mit je drei Zeichen oder wie schaut das Format aus, dass du die so merkwürdig speichern kannst!

    Wenn du in der Datenbank nur eine Liste von Typnummern hast und mit LIKE und Wildcard nach Nummern suchst, bekommst du alle gleich beginnenden Typnummern im Ergebnis! Diese Typnummern kannst du dann sortieren oder nach der größten Nummer suchen. Der Code ist in etwa der selbe wie zuvor, nur dass du nun bereits in einem Array alle entsprechenden Typnummern vorliegen hast und nicht für jede eine neue Abfrage benötigst.

    Eine genauere Angabe des Formates der Typnummern würde sehr helfen, damit man weiß, wann wo wie und warum hochgezählt würde und was ein Index ist und so weiter...
    Anbei ein winziger Auszug:

    150 44C5 E
    150 44A5 E
    150 44A3 E B
    150 44A3 E C
    150 44C3 E A
    oder:
    400 140 E A
    400 34C E
    400 34C E A
    400 34C E B
    400 14C E
    150 44A3 E B
    oder:
    150 38B K36
    150 38B K36 A
    150 38B K36 B
    150 38B K36 C
    Vielleicht lässt sich daran erkennen wo mein Problem liegt.
    Auch die Leerstellen sind wichtig.
    In der vorherigen Antwort denke konnte das Problem besser beschreiben.
    Danke für deine Antwort.

    Einen Kommentar schreiben:


  • bratkartoffel
    antwortet
    Zitat von robydog Beitrag anzeigen
    also wenn ich dich richtig verstanden habe geht es dir darum dass wenn eine Zahl doppelt vorkommt diese ein A hinten dran gesetzt bekommen soll... falls diese doppelte zahl mit A auch schon vorhanden ist sollte B kommen usw

    ist nur ein denkanstoss weiss jetzt nicht was die anderen davon halten... aber warum erstellt du nicht einen String mit dem Alphabet so wie du es haben möchtest. Dann wenn ermittelt wurde ob die Zahl schon vorhanden ist nimmst du den ersten buchstaben aus dem array... wenn A nun schon vorhanden ist suchst du im String nach A und nimmst den nächsten buchstaben aus dem String
    Ja genauso dachte ich mir das auch.
    Bei mir hackts nur mit den Verzweigungen, ich weiss nicht wie ich dieses automatische hochzählen hinbekomme, um dann wieder zu vergleichen.

    PHP-Code:
    $res mysql_query(" Select `Typnummer` FROM TP WHERE Typnummer = '$Typnummer' order by ID desc "); 
    damit könnte ich schn mal sehen ob die Typnummer bereits vorhanden ist.

    PHP-Code:
    while($value mysql_fetch_array($res)){

    if (
    $value["kpl"] != $Typnummer )    {
    Falls nicht vorhanden speichere so ab wie geschrieben... 
    falls vorhanden dann etwas in der Art:
    PHP-Code:
    else{
    $Typnummer "$Typnummer .$xxx -> hier Index anhängen";
    }

    Jetzt müsste doch wieder ein Vergleich mit der DB stattfinden ob die neu zusammengestellte Typnummer bereits existiert, oder?
    Falls dem so wäre:
    irgendwie den Index erhöhen und dann wieder anhängen und wieder prüfen...

    Was eine Mühle!!!

    Ich hoffe auf eure Hilfe...

    Einen Kommentar schreiben:


  • Asipak
    antwortet
    Und wenn du mit Buchstaben rechnen wuerdest?

    Ich bin mir nicht sicher, kann es auch nicht testen, aber erhaelst du mit folgender Ausgabe eine Dezimalzahl oder vielleicht sogar schon das B?
    Code:
    echo 'A' + 1;
    Andernfalls kannst du dir mal die Funktionen PHP: chr - Manual und PHP: ord - Manual anschauen.

    Dann liest du zunaechst alle Zeichenketten sortiert aus (s. Sirkes Vorschlag) und pickst dir die "groesste" Zeichenkette heraus und extrahierst das letzte Zeichen und addierst 1.

    So ganz verstehe ich dein Vorgehen aber nicht, kann sein, dass ich gerade Unsinn erzaehle.

    Gruss

    Einen Kommentar schreiben:


  • robydog
    antwortet
    also wenn ich dich richtig verstanden habe geht es dir darum dass wenn eine Zahl doppelt vorkommt diese ein A hinten dran gesetzt bekommen soll... falls diese doppelte zahl mit A auch schon vorhanden ist sollte B kommen usw

    ist nur ein denkanstoss weiss jetzt nicht was die anderen davon halten... aber warum erstellt du nicht einen String mit dem Alphabet so wie du es haben möchtest. Dann wenn ermittelt wurde ob die Zahl schon vorhanden ist nimmst du den ersten buchstaben aus dem array... wenn A nun schon vorhanden ist suchst du im String nach A und nimmst den nächsten buchstaben aus dem String

    Einen Kommentar schreiben:


  • Sirke
    antwortet
    Bestehen deine Typnummern als IMMER aus vier Blöcken mit je drei Zeichen oder wie schaut das Format aus, dass du die so merkwürdig speichern kannst!

    Wenn du in der Datenbank nur eine Liste von Typnummern hast und mit LIKE und Wildcard nach Nummern suchst, bekommst du alle gleich beginnenden Typnummern im Ergebnis! Diese Typnummern kannst du dann sortieren oder nach der größten Nummer suchen. Der Code ist in etwa der selbe wie zuvor, nur dass du nun bereits in einem Array alle entsprechenden Typnummern vorliegen hast und nicht für jede eine neue Abfrage benötigst.

    Eine genauere Angabe des Formates der Typnummern würde sehr helfen, damit man weiß, wann wo wie und warum hochgezählt würde und was ein Index ist und so weiter...

    Einen Kommentar schreiben:


  • bratkartoffel
    antwortet
    Zitat von Arne Drews Beitrag anzeigen
    Das find' ich schonmal geil...

    Spaß beiseite:
    Wie sieht es denn mit der DB aus? Kannst daran noch was ändern?
    Ich würde sonst vorschlagen, die veränderlichen Einzelsegmente der Nummern in einzelne Spalten zu schreiben,
    dann kannst Du einiges an PHP-Code mit vernünftigen MySQL-Abfragen sparen.

    Beispiel:
    Code:
    // Deine Tabelle
    
    Spalte1   |   Spalte2   |   Spalte3   |   Spalte4
      150     |     3A5     |      E      |      A
    Danke schon mal für die Antwort.
    In der Tat habe ich alle Segmente erst separat und am schluss noch mal als
    Summe, mit den dafür vorgesehenen Leerstellen gespeichert.
    Die DB sieht so aus:
    Spalte1 | Spalte2 | Spalte3 | Spalte4|Spalte 5 |Spalte 6|
    150 | 3A5 | E | A |STRADD |Typnummer

    Wobei STRADD quasi die "Stringaddition" und Typnummer die STRADD + Index darstellt.

    Mein Problem ist wie verleiche äh vergleiche ich die aktuelle Typnummer mit allen andern in der DB und wie würde ich dann automatisch den Index anpassen, sprich erhöhen?
    Den Aufbau dieser Schleife bzw. Verzeigweigung kapier ich einfach nicht.

    Einen Kommentar schreiben:


  • Arne Drews
    antwortet
    Dann denkt man komplett um

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Und was macht man, wenn auch nur ein anderes Format dazukommt?

    Einen Kommentar schreiben:


  • Arne Drews
    antwortet
    Zitat von bratkartoffel
    Ich hoffe mich unverständlich ausgedrückt zu haben
    Das find' ich schonmal geil...

    Spaß beiseite:
    Wie sieht es denn mit der DB aus? Kannst daran noch was ändern?
    Ich würde sonst vorschlagen, die veränderlichen Einzelsegmente der Nummern in einzelne Spalten zu schreiben,
    dann kannst Du einiges an PHP-Code mit vernünftigen MySQL-Abfragen sparen.

    Beispiel:
    Code:
    // Deine Tabelle
    
    Spalte1   |   Spalte2   |   Spalte3   |   Spalte4
      150     |     3A5     |      E      |      A

    Einen Kommentar schreiben:


  • bratkartoffel
    antwortet
    Danke erst mal für die Antwort!
    Das Format ist fest vorgegeben und wird durch ein HTML Formular erzeugt in dem der Nutzer Dropdownfelder und Radiobuttons anklickert.
    Durch den Vergleich:
    PHP-Code:
    $Typnummer "$STRADD D"
    finde ich heraus ob es die Typnummer schon in der DB gibt- falls ja wird ein Index (z.B. "E" ) hinten angestellt.
    Wenn der Index an der Typnummer hängt, wird wieder in der DB nachgesehen ob es diese Nummer schon gibt falls ja wird der index durch einen neueren, höheren ("F") überschrieben.
    Ich habe im Prinzip etwa 40 "IF"- Verzweigungen mit jedesmal einen neuen Index (A oder B oder AC und so weiter).Das wollte ich gerne automatisieren da ich ja sonst irgendwann einmal ein Klorollen langes Programm bekomme...
    Ich hoffe mich deutlich ausgedrückt zu haben?
    Ich bin bei verschachtelten schleifen und if verzweigungen am verzweifeln....

    Die Variable $STRADD beeinhaltet die rohe Typnummer (via Formular generiert und hat eine eigene Spalte in Mysql) und der Index "D" wird dann angehängt,
    das ganze wird dann als "Typnummer" gespeichert.

    Einen Kommentar schreiben:


  • Sirke
    antwortet
    Ich weiß nicht genau, wie diese Nummern generiert werden und welches Format sie aufweisen (müssen)! Daher fällt eine direkte Hilfe auch nicht so leicht, aber wenn ich es richtig verstanden habe, dann gibst du eine Nummer ein: Für denn Fall dass diese Nummer noch nicht existiert, dann fügst du diese Nummer hinzu oder schaust, ob die "nächste Nummer" existiert und verfährst auf die selbe Art?!

    Ich würde dann in der MySQL Tabelle folgende Abfrage machen:
    PHP-Code:
    $sql "SELECT * FROM tabelle WHERE nummer LIKE '".$nummer."%';"
    Das % (Prozentzeichen) ist eine Wildcard, sodass die Abfrage alle Datensätze mit den Nummern mit dem selben Anfangszeichen liefert.
    Sofern nun diese Nummern ein festes Format haben, kannst die diese Liste sortieren und weißt dann ob die Nummer exisitert und wo die neue Nummer eingefügt werden muss!

    Ich würde wahrscheinlich nach diesem Ansatz vorgehen, aber feste Formate mit gewissen Definitionen können eine solche Suche durchaus vereinfachen...

    Einen Kommentar schreiben:

Lädt...
X