![]() |
Datenbank: MySQL • Version: 5 • Zugriff über: Unidac
Ansatz für SQL Abfrage gesucht
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! |
AW: Ansatz für SQL Abfrage gesucht
Mit der Aggregatsfunktion GROUP_CONCAT()
|
AW: Ansatz für SQL Abfrage gesucht
Das ist es. Danke! :cheer:
|
AW: Ansatz für SQL Abfrage gesucht
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! |
AW: Ansatz für SQL Abfrage gesucht
Oder weglassen, denn es sind ja verschiedene Projektnummern vorhanden
|
AW: Ansatz für SQL Abfrage gesucht
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. :gruebel: |
AW: Ansatz für SQL Abfrage gesucht
Code:
Funktioniert nur, wenn es keine Maschinen mit >4 Stellen (z.B. 1333) gibt.
select * from TabelleMitGruppen
where GruppierteMaschinen like '%333%' and GruppierteMaschinen like '%456%' |
AW: Ansatz für SQL Abfrage gesucht
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 ) |
AW: Ansatz für SQL Abfrage gesucht
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
|
AW: Ansatz für SQL Abfrage gesucht
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:
Wobei ich diese 'GruppierteMaschinenSpalte' dann mit Kommata einschließen würde, sodaß die 'like' Klausel sicherer wird:
select *
from TabelleMitGruppen Where ( GruppierteMaschinen like '%12%' and GruppierteMaschinen like '%34%' and not GruppierteMaschinen like '%56%' ) or GruppierteMaschinen like '%78%'
Code:
Dann dürfen auch Maschinen '123' drin vorkommen.
select *
from TabelleMitGruppen Where GruppierteMaschinen like '%,12,%' Oder man macht es so:
Code:
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.
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 @Fillibuster: So etwa
Code:
select * from
( select ProjektNummer, Group_Concat(...) as Maschinennummern.... from ... ) x where x.Maschinennummern like =... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz