Announcement

Collapse
No announcement yet.

Wie Datensätze fortlaufend durchnummerieren ?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    Originally posted by defo View Post
    Sehr interessant, was ist draus geworden?
    Haben die Spitzenleute jetzt auch alle mehrere Jobs, liegt ja beim Fußvolk voll im Trend.
    Oder wird der Faktor 12 auf die Wochen/Monats/Jahresarbeitszeit berechnet?
    Und gibt es auch eine Volumenbetrachtung über die Anzahl der niedrig und hoch vergüteten Jobs in diesem Modell?
    Die Initiative wurde mit 65,3 % deutlich abgelehnt, so linke Forderungen haben in der Schweiz traditionell nur geringe Chancen. Der Vergleich Fussvolk = 40 Sunden/Woche Teppichetage = 60 Sunden/Woche war auch ein Thema. Falls du wirklich mehr über die Argumente dafür und dagegen wissen möchtest: Google ist dein Freund.

    Gruss

    Comment


    • #17
      Hallo Ralf
      1)
      [Highlight=SQL]CREATE TABLE Atoms (Atom bigint NOT NULL);
      INSERT INTO Atoms(Atom) VALUES (3),(5);
      WHILE (10000 > (SELECT count(*) FROM Atoms))
      BEGIN
      INSERT INTO Atoms
      SELECT distinct(a1.atom+a2.atom)
      FROM Atoms a1
      INNER JOIN Atoms a2 ON a1.atom != a2.atom
      WHERE NOT EXISTS (SELECT atom FROM Atoms a3 WHERE a3.atom = (a1.atom + a2.atom))
      END[/Highlight]
      Das ist ja ein kleines Programm.
      Ich wußte nicht, daß SQL so mächtig ist.
      Weißt du, wie man diesen SQL -Befehl in C++ umsetzt ?

      2)
      Das wird aber schnell sehr langsam wenn man noch mehr Atome haben will (40000 Atome haben hier ~7 Minuten gebraucht)
      Meine einfachen SQL-Befehle in C++ umgesetzt brauchen schon bei ca. 500 Atomen ca. 10 Minuten.
      Vermutlich ist es besser While in den SQL-Befehl zu nehmen, als außerhalb in das C++ Programm.

      Beim ausprobieren hatte ich den Gedanken das das Beispiel auch wenn nicht passend für relationale Datenbank vielleicht doch ganz lehrreich ist. Kann es sein das du zu sehr algorithmisch über dein Problem nachdenkst?
      SQL im engeren Sinn beschreibt KEINE Algorithmen es beschreibt ein Ergebnis.
      Was meinst du mit "algorithmisch" nachdenken ?
      Das muß man doch beim Programmieren.

      Hat deine beschrieben Regel mit den Atomen einen Namen? Erscheint mir irgendwie merkwürdig denn man sollte ganz schnell immer alle natürliche Zahlen drin haben. Außer eben ein paar Lücken nahe den Startwerten.
      [/QUOTE]
      Habe dies Regel und die Anfangszahlen selbst gebastelt.
      Allerdings vermute ich, daß dies vor mir auch schon jemand gemacht hat.

      Ob die sich ergebende Zahlenreihe
      3, 5, 8, 11, 13, 14,16,17,18,19,20,21,22,23,24,25, ....348, ?, ?, ....
      irgendwann fortlaufend sich um 1 erhöht weiß ich nicht.
      Zumindest kommen 86 und 174 nicht mehr darin vor.
      Da du schon 40000 Atome produziert hast interessiert mich, ob darin irgendwann eine fortlaufende (sich um 1 erhöhende) Zahlenfolge drin vorkommt.
      (Kann man das mit einer SQL-Anweisung überprüfen?)

      mfg
      Bh

      Comment


      • #18
        Zunächst mal: Du hast irgendetwas falsch gequotet.

        Originally posted by bernhart View Post
        Hallo Ralf
        1)

        Das ist ja ein kleines Programm.
        Ich wußte nicht, daß SQL so mächtig ist.

        2)

        Was meinst du mit "algorithmisch" nachdenken ?
        Das muß man doch beim Programmieren.

        Da du schon 40000 Atome produziert hast interessiert mich, ob darin irgendwann eine fortlaufende (sich um 1 erhöhende) Zahlenfolge drin vorkommt.
        (Kann man das mit einer SQL-Anweisung überprüfen?)
        1) SQL ist sehr mächtig und man kann je nach dem, welche DB man nutzt auch Programmcode damit schreiben.
        Was Deine Experimente und MAthematik angeht. SQL ist am ehesten mit Mengenlehre zu vergleichen. Probleme oder Knobelaufgaben aus der Mengenleere sollten sich mit SQL also am einfachsten abbilden lassen.

        2) naja sein SQL Befehl ist ja nicht algorithmisch. Jedenfalls sind ein paar Zeilen SQL kein Algorithmus.

        3) man kann das Ergebnis mit SQL prüfen.
        Dazu muss die Ausgabe Deines Algorithmus mit einer Menge gejoint werden, die fortlaufend ist. Dabei kann der Join als Right Join gebaut werden und man kann dann an den Lücken sehen (field is null), wo Zahlen fehlen.
        Ca so:
        Code:
        select FeldMeineZahlen. FeldDurchGehendeZahlen
          from meineMenge 
               right join
               DurchgehendeMenge on
               FeldMeineZahlen = FeldDurchGehendeZahlen
         where MeineZahlen is null
        Gruß, defo

        Comment


        • #19
          Weißt du, wie man diesen SQL -Befehl in C++ umsetzt ?
          Nö. C++ benutze ich nur ganz selten. Ich habe andere Präferenzen.

          Was meinst du mit "algorithmisch" nachdenken ?
          Das muß man doch beim Programmieren.
          Ja aber SQL ist keine Programmiersprache im engeren Sinne. Du definierst mit SQL nicht wie die Datenbank Daten finden soll nur welchen Regeln das Ergebnis entsprechen soll. Die Datenbank entscheidet dann mehr oder weniger alleine welcher Weg am schnellsten zum gewünschten Ergebnis führt. Ich habe hier zwar algorithmische Sprachelemente benutzt (while Schleife) aber das ist eigentlich nicht Teil von SQL sondern eine reine Erweiterung. Der entscheidende Teil ist ja auch der Insert...Select und der ist kein Algorithmus.
          Um richtiges/gutes SQL zu erstellen muss man also gedanklich das Ziel beschreiben aber nicht den Weg dahin.

          Zumindest kommen 86 und 174 nicht mehr darin vor.
          Da du schon 40000 Atome produziert hast interessiert mich, ob darin irgendwann eine fortlaufende (sich um 1 erhöhende) Zahlenfolge drin vorkommt.
          Dann hast du dein Programm nicht lange genug laufen lassen Dort wo ich abgebrochen habe waren nachher alle natürlichen Zahlen > 15 enthalten. Ich denke das ist prinzipiell so das ab einer bestimmten Untergrenze (vermutlich direkt aus den Startwerten berechenbar) alle Zahlen im Ergebnis stecken für einen Beweis fehlen mir aber die Fähigkeiten (Einnschränkung wenn die Startwerte Primzahlen sind)

          Bei den Startwerten 3,11 scheint die Untergrenze 33 zu sein.
          Bei 7, 11 ist es 77.
          Bei 7, 13 ist es 104.
          Zuletzt editiert von Ralf Jansen; 21.11.2016, 20:38.

          Comment


          • #20
            Hallo Ralf,
            Danke für dein Feedback: mein Programm ist nicht lange genug gelaufen.
            Deswegen der Fehler.
            Dein Vorschlag war ja:
            ====================================
            CREATE TABLE Atoms (Atom BIGINT NOT NULL);
            INSERT INTO Atoms(Atom) VALUES (3),(5);
            WHILE (10000 > (SELECT COUNT(*) FROM Atoms))
            BEGIN
            INSERT INTO Atoms
            SELECT DISTINCT(a1.atom+a2.atom)
            FROM Atoms a1
            INNER JOIN Atoms a2 ON a1.atom != a2.atom
            WHERE NOT EXISTS (SELECT atom FROM Atoms a3 WHERE a3.atom = (a1.atom + a2.atom))
            END
            ====================================
            Bevor ich das in C++ umsetze, ist es vielleicht sinnvoll es direkt in SQL an eine DB Datenbank zu senden.
            Habe bis jetzt C++ verwendet und damit eine MS-Access DB erzeugt und angesprochen (weil sich MS-Access auf vielen Rechnern befindet).
            Frage:
            Weisst du, ob dein SQL-Befehl oben auch von MS-Access akkzeptiert wird ?

            mfg
            Bh

            Comment


            • #21
              Möglicherweise. Wenn du etwas über Datenbanken lernen willst würde ich aber empfehlen Access zu umgehen. Es gibt von eigentlich allen relevanten Datenbanken auch kostenlose Versionen die man für deine Zwecke benutzen kann da gibt es auch tatsächlich was zu lernen was über diese spezielles Produkt hinausgeht. Bei Access kann man eigentlich nur was über Access lernen (meist Dinge die man in einer richtigen Datenbank gerade nicht so tun sollte).

              Comment


              • #22
                Originally posted by bernhart View Post
                Habe bis jetzt C++ verwendet und damit eine MS-Access DB erzeugt und angesprochen (weil sich MS-Access auf vielen Rechnern befindet).
                Frage:
                Weisst du, ob dein SQL-Befehl oben auch von MS-Access akkzeptiert wird ?
                Dem würde ich so nicht zustimmen. Im normalen MS-Office Paket ist Access nicht enthalten, das kostet extra. Eine weiteres Problem sind die verschiedenen untereinander nicht kompatiblen Versionen der Treiber.

                Ausserdem muss ich Ralf zustimmen, Access hat viele Dinge welche eigentlich nicht zu einer Datenbank gehören und andererseits fehlen Elemente die jede relationale Datenbank haben sollte. Persönlich bin ich sogar der Ansicht, dass MS-Access überhaupt keine relationale Datenbank ist.

                Als einfachen Einstieg in die Welt der Datenbanken würde ich dir SQLite empfehlen. Sie ist kostenlos und kennt die wesentlichen Elemente einer Datenbank ohne dass du gleich ein Monster wie PostgreSQL verwendest bei dem man nur für die Installation schon ein Training haben sollte.

                Gruss

                Comment


                • #23
                  Originally posted by Wernfried View Post
                  Ausserdem muss ich Ralf zustimmen, Access hat viele Dinge welche eigentlich nicht zu einer Datenbank gehören und andererseits fehlen Elemente die jede relationale Datenbank haben sollte. Persönlich bin ich sogar der Ansicht, dass MS-Access überhaupt keine relationale Datenbank ist.
                  Da habt ihr schon recht.
                  Auf den mir zugänglichen Rechnern ist aber MS-ACCESSS installiert.
                  Und nur für dieses hier beschriebene Problem will ich MS-ACCESSS auch nur nutzen.
                  Für ernsthafte Probleme taugt es vermutlich nicht.

                  mfg
                  Bh

                  Comment


                  • #24
                    [Highlight=SQL]CREATE TABLE Atoms (Atom bigint NOT NULL);
                    INSERT INTO Atoms(Atom) VALUES (3),(5);
                    WHILE (10000 > (SELECT count(*) FROM Atoms))
                    BEGIN
                    INSERT INTO Atoms
                    SELECT distinct(a1.atom+a2.atom)
                    FROM Atoms a1
                    INNER JOIN Atoms a2 ON a1.atom != a2.atom
                    WHERE NOT EXISTS (SELECT atom FROM Atoms a3 WHERE a3.atom = (a1.atom + a2.atom))
                    END[/Highlight]
                    Was mir gerade dazu einfällt:
                    Hier wird ganz am Anfang eine Tabelle erzeugt (CREATE TABLE ...)
                    Muß man vorher dazu nicht eine Datenbank erstellen?
                    Fehlt also dieser SQL-Befehl hier bzw. wie lautet dieser ?

                    mfg
                    Bh

                    Comment


                    • #25
                      Originally posted by bernhart View Post
                      Auf den mir zugänglichen Rechnern ist aber MS-ACCESSS installiert.
                      Und nur für dieses hier beschriebene Problem will ich MS-ACCESSS auch nur nutzen.
                      Für ernsthafte Probleme taugt es vermutlich nicht.
                      Man kann es auch für "ernsthafte" Probleme nutzen, immerhin kostet es Geld und irgendwer bezahlt es.

                      Man braucht es aber nicht, für Spaß und Ernst gibt es kostenlose, echte Datenbanken, die programmierbar sind und am wichtigsten:
                      Sie halten sich viel mehr an die SQL Standards als MS Access.
                      Wenn Du also etwas kennenlernen willst, was auch anderweitig verwendbar ist, dann ist MS Access nicht die erste Wahl.
                      Gruß, defo

                      Comment


                      • #26
                        [Highlight=SQL]CREATE TABLE Atoms (Atom bigint NOT NULL);
                        INSERT INTO Atoms(Atom) VALUES (3),(5);
                        WHILE (10000 > (SELECT count(*) FROM Atoms))
                        BEGIN
                        INSERT INTO Atoms
                        SELECT distinct(a1.atom+a2.atom)
                        FROM Atoms a1
                        INNER JOIN Atoms a2 ON a1.atom != a2.atom
                        WHERE NOT EXISTS (SELECT atom FROM Atoms a3 WHERE a3.atom = (a1.atom + a2.atom))
                        END[/Highlight]
                        Hallo Ralf,
                        1)
                        weißt du, ob dein kleines SQL-Programm auf XAMPP funktioniert ?
                        Wenn es nicht auf XAMPP läuft:
                        Kann man dann das SQL-Programm so abändern, daß es auf XAMPP läuft ?

                        2)
                        Wo hast du es entwickelt bzw. ablaufen lassen (Datenbank bzw. Programm, das dieses SQL-Programm ausführt)?

                        mfg
                        Bh
                        Zuletzt editiert von bernhart; 23.11.2016, 17:46.

                        Comment


                        • #27
                          XAMPP= Apache, Mysql, PHP
                          Wo soll da das laufen?
                          Du kannst es in die Konsole abtippen

                          Wenn du dir MySQL installiert hast, warum benutzt du nicht
                          http://www.mysql.de/products/workbench/

                          Das ist genau das Tool was du neulich gesucht hast um Abfragen zu tätigen.
                          Zuletzt editiert von Christian Marquardt; 23.11.2016, 17:53.
                          Christian

                          Comment


                          • #28
                            Wo hast du es entwickelt bzw. ablaufen lassen (Datenbank bzw. Programm, das dieses SQL-Programm ausführt)?
                            Es könnte das SQL Server Management Studio gewesen sein. Dort funktioniert die Abfrage einwandfrei (im Ggs. zu XAMPP).
                            MfG
                            Cheat-Sheets for Developers / Programming Quotes

                            Comment


                            • #29
                              XAMPP= Apache, Mysql, PHP
                              Wo soll da das laufen?
                              Du kannst es in die Konsole abtippen
                              Nicht nur: Ich kann das ganze SQL-Programm (in dem While vorkommt) in einem der letzten Postings markieren, in einen Editor reinkopieren (um evtl. Steuerzeichen wegzubekommen), dort wieder markieren und in die XAMPP-Shell einfügen und ausführen lassen. Aber die zugehörige Mysql DB versteht dieses While nicht.

                              Wenn du dir MySQL installiert hast, warum benutzt du nicht
                              http://www.mysql.de/products/workbench/
                              Weil Mysql mit while nicht klar kommt.

                              Ergo:
                              XAMPP (mit Mysql) nützt mir also in dieser Sache nichts oder siehst du da anders?

                              mfg
                              Bh

                              Comment


                              • #30
                                Sicherlich sehe ich das anders.
                                Weil du also den falschen SQL-Dialekt hast (erst Access, nun MySQL) ist also MySQL und das damit verbundene Entwicklungstool (Workbench) nicht nutzbar?
                                Anstatt dem Entwicklungstool hast du also einen Webserver und PHP?
                                Wie wäre es, du übersetzt das nach MySQL?
                                Alternativ nutze das System, mit dem es gefertigt wurde -> MSSQL

                                MySQL & While
                                https://dev.mysql.com/doc/refman/5.7/en/while.html
                                Christian

                                Comment

                                Working...
                                X