Ankündigung

Einklappen
Keine Ankündigung bisher.

Kann ich mehrere abfragen nacheinander aufrufen

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

  • Kann ich mehrere abfragen nacheinander aufrufen

    Hallo

    Ich habe ein Problem mit meinem Warenkorb

    Also: Viele Artikel haben bei uns Staffelpreise und dann gibt es noch Kundenfestpreise

    Also in Access hatte ich das mangelsProgrammierkenntnisse über mehrere Abfragen gelöst

    Also erste abfrage hat überprüft ob Kundenpreise da sind und diese eingetragen .

    Jede weiter Abfrage hat dann als Kriterium Warenkorbpreis = 0 sowie bei abfrage 2 Menge >1 und < 6 und Abfrage 3 menge >5 und <12. Abfrage 4 – 6 war gleich aufgebaut.
    War zwar nicht elegant funktioniert aber jetzt über 20 Jahre
    Kann ich das so auch in Php und mysql umsetzen ohne Fehlermeldungen zu bekommen z.b. weil abfrage keinen Wert liefert?

    Wenn nein wie kann ich es besser lösen.

    Grus Michael


  • #2
    Ist machbar.
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      Also, um es mal zu zeigen. Hier eine Tabelle, die Preise enthält. Du kannst je Kunde beliebig viele einzelne Preis-Ranges definieren. Was ich vergessen habe: da noch eine Artikelnummer einzubauen. Aber das ist trivial, darum geht es nicht. Also, nachfolgend die Tabelle und einige Demo-Abfragen:

      Code:
      test=*# create table preis_liste(kunde int, menge int4range, preis numeric, exclude using gist(kunde with =, menge with &&));
      CREATE TABLE
      test=*# insert into preis_liste values (1, '[1,6)',10);
      INSERT 0 1
      test=*# insert into preis_liste values (1, '[6,11)',9.5);
      INSERT 0 1
      test=*# insert into preis_liste values (1, '[11,21)',9.3);
      INSERT 0 1
      test=*# insert into preis_liste values (1, '[21,101)',9.2);
      INSERT 0 1
      test=*# insert into preis_liste values (1, '[101,)',9.1);
      INSERT 0 1
      test=*# select * from preis_liste ;
       kunde |  menge   | preis
      -------+----------+-------
           1 | [1,6)    |    10
           1 | [6,11)   |   9.5
           1 | [11,21)  |   9.3
           1 | [21,101) |   9.2
           1 | [101,)   |   9.1
      (5 rows)
      
      test=*# select preis from preis_liste where kunde = 1 and menge @> 3;
       preis
      -------
          10
      (1 row)
      
      test=*# select preis from preis_liste where kunde = 1 and menge @> 13;
       preis
      -------
         9.3
      (1 row)
      
      test=*# select preis from preis_liste where kunde = 1 and menge @> 33;
       preis
      -------
         9.2
      (1 row)
      
      test=*# select preis from preis_liste where kunde = 1 and menge @> 133;
       preis
      -------
         9.1
      (1 row)
      
      test=*#
      Das ganze geht durch den Index auch index-basiert:

      Code:
      test=*# \d preis_liste
                   Table "public.preis_liste"
       Column |   Type    | Collation | Nullable | Default
      --------+-----------+-----------+----------+---------
       kunde  | integer   |           |          |
       menge  | int4range |           |          |
       preis  | numeric   |           |          |
      Indexes:
          "preis_liste_kunde_menge_excl" EXCLUDE USING gist (kunde WITH =, menge WITH &&)
      
      test=*# explain analyse select preis from preis_liste where kunde = 1 and menge @> 133;
                                                                      QUERY PLAN                                                                 
      -------------------------------------------------------------------------------------------------------------------------------------------
       Index Scan using preis_liste_kunde_menge_excl on preis_liste  (cost=0.14..8.16 rows=1 width=32) (actual time=0.016..0.016 rows=1 loops=1)
         Index Cond: ((kunde = 1) AND (menge @> 133))
       Planning time: 0.066 ms
       Execution time: 0.044 ms
      (4 rows)
      
      test=*#
      Das wird also auch noch bei einigen Millionen/Milliarden Einträgen flott sein, glaube mir. Allerdings ist das mit PostgreSQL gemacht, MySQL wird das so wohl eher nicht können.

      PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

      Kommentar

      Lädt...
      X