AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Ansatz für SQL Abfrage gesucht
Thema durchsuchen
Ansicht
Themen-Optionen

Ansatz für SQL Abfrage gesucht

Ein Thema von fillibuster · begonnen am 1. Jul 2014 · letzter Beitrag vom 20. Nov 2014
Antwort Antwort
Seite 1 von 2  1 2      
fillibuster

Registriert seit: 3. Nov 2010
Ort: Coesfeld
245 Beiträge
 
Delphi 2010 Professional
 
#1

Ansatz für SQL Abfrage gesucht

  Alt 1. Jul 2014, 14:09
Datenbank: MySQL • Version: 5 • Zugriff über: Unidac
Hallo,

ich suche einen Ansatz für eine SQL Abfrage. Ich habe folgende (nicht mehr änderbare!!!) Tabellenstruktur:

projektnr|maschinenr|weitere Daten ...
456|333|weitere Daten ...
456|334|weitere Daten ...
456|335|weitere Daten ...
789|123|weitere Daten ...
789|124|weitere Daten ...

Rauskommen soll als Ergebnis die folgende Sortierung:

456|333,334,335| weitere Daten zu 333
789|123,124| weitere Daten zu 123

Vielen Dank!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Ansatz für SQL Abfrage gesucht

  Alt 1. Jul 2014, 14:12
Mit der Aggregatsfunktion GROUP_CONCAT()
Markus Kinzler
  Mit Zitat antworten Zitat
fillibuster

Registriert seit: 3. Nov 2010
Ort: Coesfeld
245 Beiträge
 
Delphi 2010 Professional
 
#3

AW: Ansatz für SQL Abfrage gesucht

  Alt 1. Jul 2014, 14:48
Das ist es. Danke!
  Mit Zitat antworten Zitat
fillibuster

Registriert seit: 3. Nov 2010
Ort: Coesfeld
245 Beiträge
 
Delphi 2010 Professional
 
#4

AW: Ansatz für SQL Abfrage gesucht

  Alt 9. Jul 2014, 10:58
Hallo,

jetzt ist diesbezüglich noch eine Frage aufgetaucht. Ich habe die Tabelle etwas erweitert:

projektnr|maschinenr|weitere Daten ...
456|333|weitere Daten ...
456|334|weitere Daten ...
456|335|weitere Daten ...
789|123|weitere Daten ...
789|124|weitere Daten ...
987|333|weitere Daten ...
987|335|weitere Daten ...

Ich möchte jetzt nach den maschinennr. suchen, z. B.: 333 und 335 - also alle Projekte, die die Anlagen 333 und 335 enthalten. Das Ergebnis soll dann wieder so aussehen:

456|333,334,335| weitere Daten zu 333
987|333,335| weitere Daten zu 333

Da ich ja keine Projektnummer angebe muss ich die irgendwie gruppieren, um das so selektieren zu können, oder? Wie?

Danke!

Geändert von fillibuster ( 9. Jul 2014 um 11:04 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Ansatz für SQL Abfrage gesucht

  Alt 9. Jul 2014, 11:19
Oder weglassen, denn es sind ja verschiedene Projektnummern vorhanden
Markus Kinzler
  Mit Zitat antworten Zitat
fillibuster

Registriert seit: 3. Nov 2010
Ort: Coesfeld
245 Beiträge
 
Delphi 2010 Professional
 
#6

AW: Ansatz für SQL Abfrage gesucht

  Alt 9. Jul 2014, 11:31
Hi,

das verstehe ich nicht so ganz. Ich brauch ja ggf. weitere Maschinen aus dem Projekt (s. 456 (334)) die aber nicht explizit im WHERE Teil auftauchen.

Geändert von fillibuster ( 9. Jul 2014 um 11:49 Uhr)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#7

AW: Ansatz für SQL Abfrage gesucht

  Alt 9. Jul 2014, 11:45
Code:
select * from TabelleMitGruppen
 where GruppierteMaschinen like '%333%'
   and GruppierteMaschinen like '%456%'
Funktioniert nur, wenn es keine Maschinen mit >4 Stellen (z.B. 1333) gibt.

Geändert von Dejan Vu ( 9. Jul 2014 um 11:58 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#8

AW: Ansatz für SQL Abfrage gesucht

  Alt 9. Jul 2014, 11:55
Oder mit einem Subselect
SQL-Code:
SELECT
  ...
FROM
  Tabelle A
WHERE
  maschinenr = 333
  AND EXISTS(
    SELECT
      *
    FROM
      Tabelle
    WHERE
      maschinenr = 335
      AND projektnr = A.projektnr
  )
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
fillibuster

Registriert seit: 3. Nov 2010
Ort: Coesfeld
245 Beiträge
 
Delphi 2010 Professional
 
#9

AW: Ansatz für SQL Abfrage gesucht

  Alt 9. Jul 2014, 12:10
Hi,

da ein Subselect zu aufwändig wäre würde ich gern den Vorschlag von Deja Vu aufgreifen. Dabei habe ich aber das Problem, dass er die Spalte Maschinennummer nicht erkennt:
Code:
GROUP_CONCAT(tabelle.maschinenr SEPARATOR '', '') AS Maschinennummer
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#10

AW: Ansatz für SQL Abfrage gesucht

  Alt 9. Jul 2014, 12:12
Ja, dachte ich mir auch, aber..
1. ist das dann auf exakt 2 begrenzt und lässt sich nicht so leicht erweitern (geht aber).
2. ist das Ergebnis nicht das, was er will
3. ist es vermutlich schneller

Ich würde (auch wenn der Ansatz ziemlich hemdsärmelig ist) vermutlich meinen Ansatz verwenden. Nicht weil es meiner ist, sondern weil er so einfach ist, und er sich sehr leicht auf beliebig viele Maschinen erweitern lässt, bzw. auch auf Konstrukte wie: "Maschine 12 und 34, aber nicht 56. Oder aber 78".

Code:
select * 
from TabelleMitGruppen
Where (
      GruppierteMaschinen like '%12%'
  and GruppierteMaschinen like '%34%'
  and not GruppierteMaschinen like '%56%'
  )
or
  GruppierteMaschinen like '%78%'
Wobei ich diese 'GruppierteMaschinenSpalte' dann mit Kommata einschließen würde, sodaß die 'like' Klausel sicherer wird:
Code:
select * 
from TabelleMitGruppen
Where GruppierteMaschinen like '%,12,%'
Dann dürfen auch Maschinen '123' drin vorkommen.


Oder man macht es so:
Code:
select * from
  (
    select ProjektNr,
           sum (iif(Maschinen in (12,34,56),1,0) as Cnt
      from Tabelle
     where Maschinen in (12,34,56)
) x where c.Cnt=3
So richtig flott ist das aber auch nicht. Wie macht man eigentlich diese Art der Abfragen richtig? Ich würde einen fulltext auf die Spalte 'GruppierteMaschinen' packen, dann ist das richtig schnell.

@Fillibuster: So etwa

Code:
select * from
( select ProjektNummer, Group_Concat(...) as Maschinennummern....
  from ...
) x where x.Maschinennummern like =...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz