Ergebnis 1 bis 7 von 7

Thema: [MYSQL] Abfrage in MySQL ... will nicht so wie ich will

  1. #1
    Contao-Fan
    Registriert seit
    28.09.2010.
    Ort
    Leipzig
    Beiträge
    461

    Standard [MYSQL] Abfrage in MySQL ... will nicht so wie ich will

    Hallo Leute,

    ich habe im MYSQL eine Abfrage gestartet:
    Code:
    SELECT pid,ff_name,value FROM `tl_formdata_details`
    Where `ff_name` in ('Bauteil1','menge_Bauteil1', 'Bauteil2','menge_Bauteil2')
    order by `pid` ASC
    Da kam dann folgendes raus:
    pid ff_name value
    267 bauteil1 ZE-Umbauset
    267 menge_bauteil1 1
    267 bauteil2 Degen
    267 menge_bauteil2 24
    270 bauteil1 RJ45-Hub
    270 menge_bauteil1 2
    270 bauteil2 Econamic Grid Router
    270 menge_bauteil2 5
    272 bauteil1 Degen
    272 menge_bauteil1 12
    272 bauteil2 Senec Batt Inverter 48 V - Pb
    272 menge_bauteil2 3

    Nun möchte ich gern das die Bauteile so wie die dazugehörige menge gezählt werden.
    Das dann am besten folgende Tabelle raus kommt:
    value count(*)
    ZE-Umbauset 1
    RJ45-Hub 2
    Degen 36
    Senec Batt Inverter 48 V - Pb 3
    Econamic Grid Router 5

    Kann mir da einer helfen eine Abfrage fertig zu machen.

  2. #2
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.513
    User beschenken
    Wunschliste

    Standard

    Wieso ist die Menge eines Bauteils eine eigene Zeile in der Tabelle und nicht einfach beim Bauteil eine weitere Spalte?
    Dann wäre das wesendlich einfacher zu zählen.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  3. #3
    Contao-Urgestein Avatar von cliffparnitzky
    Registriert seit
    08.10.2010.
    Ort
    Lüneburg
    Beiträge
    2.451
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Weil das bei "Daten speichern" im EFG so abgelegt wird.

    Jede Zeile entspricht einem Formularfeld mit Name und Wert.

  4. #4
    Contao-Fan
    Registriert seit
    28.09.2010.
    Ort
    Leipzig
    Beiträge
    461

    Standard

    hey Jungs,

    ich hab mit einem Kollegen ewig rumprobiert.

    Wir haben das jetzt wie folgt raus bekommen.
    Code:
    Select Bauteil, Datum, sum(Menge) as Menge from
      (SELECT t1.pid,t1.ff_name,t1.value as Bauteil,FROM_UNIXTIME(t1.`tstamp`, GET_FORMAT(DATE,'EUR')) as Datum,
         (SELECT t2.value FROM `tl_formdata_details` as t2
          Where t1.pid=t2.pid and t2.ff_name in ('menge_bauteil1')) as Menge
       FROM `tl_formdata_details` as t1
      Where t1.ff_name in ('bauteil1')
    
    Union ALL
    
      SELECT t1.pid,t1.ff_name,t1.value as Bauteil,FROM_UNIXTIME(t1.`tstamp`, GET_FORMAT(DATE,'EUR')) as Datum,
         (SELECT t2.value FROM `tl_formdata_details` as t2
          Where t1.pid=t2.pid and t2.ff_name in ('menge_bauteil2')) as Menge
       FROM `tl_formdata_details` as t1
       Where t1.ff_name in ('bauteil2')
    
      ) as tempT
    Where Bauteil = "Polschrauben"
    group by Bauteil, Datum
    order by Datum, Menge desc
    Nun habe ich aber noch eine Frage.
    Ich lass mir ja nun noch das Datum mit anzeigen und will dann z.B. von Datum 01.06.2016 bis 22.06.2016 nur die anzeigen lassen.

    mit dem Befehl
    Code:
    ...
    Where Bauteil = "Polschrauben"
    and Datum between 01.06.2016 and 22.06.2016
    group by Bauteil, Datum
    order by Datum, Menge desc
    geht das irgendwie nicht, da das Datum als Text hinterlegt ist und er nur schaut wo eine 0 am Anfang steht bis eine 2 am Anfang steht. Somit gibt er mir auch Werte wo z.b. 02.03.2016 mit dabei ist.
    Wie kann ich die AND Abfrage so umbauen, dass er auch die Datumangaben richtig lesen kann und mir danach auch den Bereich raus gibt den ich haben will.

  5. #5
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Ersetze
    Code:
    FROM_UNIXTIME(t1.`tstamp`, GET_FORMAT(DATE,'EUR')) as Datum
    mit
    Code:
    t1.tstamp AS Datum
    und verwende dann
    Code:
    AND Datum BETWEEN ? AND ?
    Die beiden Parameter sind dann natürlich Unix Timestamps für deine zwei Datums.

  6. #6
    Contao-Fan
    Registriert seit
    28.09.2010.
    Ort
    Leipzig
    Beiträge
    461

    Standard

    Das ist eine gute Idee, mal schauen ob ich dann im php dann weiter mache und das datum in unix umwandle und dann dort reinschreibe.

    Danke

  7. #7
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Würdest du nicht mit EFG arbeiten, dann könntest du die Daten richtig abspeichern:
    pid part_1 count_1 part_2 count_2
    267 ZE-Umbauset 1 Degen 24
    270 RJ45-Hub 2 Econamic Grid Router 5
    272 Degen 12 Senec Batt Inverter 48 V - Pb 3
    Oder noch besser:
    pid part count
    267 ZE-Umbauset 1
    267 Degen 24
    270 RJ45-Hub 2
    270 Econamic Grid Router 5
    272 Degen 12
    272 Senec Batt Inverter 48 V - Pb 3
    Dann bräuchtest du nicht solche wahnwitzigen Querys.

    Vielleicht wäe das sogar übersichtlicher, wenn das "Aufräumen" von tl_formdata_details über ein PHP-Object oder -Array erfolgt, aus welchem du dann deine Daten sauber abgreifen kannst. Oder wenn du die Daten beim Speichern über das Formular nochmal zusätzlich sauber in eine zweite Tabelle schreibst.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •