php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 18-01-2010, 10:29
Mafiose
 Registrierter Benutzer
Links : Onlinestatus : Mafiose ist offline
Registriert seit: Jan 2010
Beiträge: 5
Mafiose befindet sich auf einem aufstrebenden Ast
Standard mehrere Einträge anzeigen,group_contact

Hallo @all,

ich habe viele Tabellen, die durch m:n Beziehung zusammen hängen.
Bei daten Ausgabe habe ich dann einige Fehler. Daten werden falsch gruppiert oder gar nicht ausgegeben.

Hier ein Beispiel:

Code:
[Faktor]
id_F|Name
8      X
17     Y

[Faktor_S]
id_S|id_Faktor
1           8
1          17
5          17

[Faktor_RG]
id_RG|id_Faktor
1         8
2         8
2        17
3        17
4        17


[Faktor_EG]
id_EG|id_Faktor
Als Ausgabe brauch ich so eine Tabelle.

Code:
Faktor name | EG_name | RG_name | S_name 
X                            1            1
X                            2            1
Y                            2            1;5
Y                            3            1;5
Y                            4            1;5
Manchmal passiert es, dass bei Ausgaben ein Faktor komplett fehlt oder in der Spalte [S] mehr als ein Eintrag steht obwohl es nur einen gibt.

SQL-Statement
PHP-Code:
Select namegroup_contact(distinct S_name Seperator ';'), EG_nameRG_name from Faktor
Left join Faktor_S ON 
(Faktor.id_F=Faktor_S.id_Faktor)
Left join S ON S.id_S Faktor_S.id_S)
für EG und RG genauso
WHERE 
(id_F =17 || id_F =8group BY RG_nameEG_nameS_name 
Edit:
hm..habe etwas rumgespielt mit der Abfrage und jetzt funktioniert es anscheiend. Habe Group By geändert in: Group By id_F, RG_name, EG_name

Geändert von Mafiose (18-01-2010 um 11:31 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 19-01-2010, 14:56
Mafiose
 Registrierter Benutzer
Links : Onlinestatus : Mafiose ist offline
Registriert seit: Jan 2010
Beiträge: 5
Mafiose befindet sich auf einem aufstrebenden Ast
Standard

kann mir jemand erklären warum das jetzt funktioniert?

anscheiend muss man bei Group auch die Ausgaben aus der Haupttabelle mit geben?
also Group by id_F. Ist die Reihenfolge eigentlich wichtig bei Group by?

Zusammengefasst:
Ich habe Tabelle A, die zu anderen Tabellen B,C usw.. in n:m Beziehung steht.

Möchte folgende Ausgabe haben
Code:
Tabelle A;Tabelle B; Tabelle C; 
blub;      xxx;       aaa, bbb, ggg;
blub;      yyy;       aaa, bbb, ggg;
huch;      xxx;       aaa;
argh;      zzz;       ddd, ffff;
argh;      yyy;      ddd, ffff;
Mit Zitat antworten
  #3 (permalink)  
Alt 19-01-2010, 15:16
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

Zitat:
Zitat von Mafiose Beitrag anzeigen
kann mir jemand erklären warum das jetzt funktioniert?
Ja, aber dafür müsstest du eine konkrete Frage stellen.

Zitat:
Zitat von Mafiose Beitrag anzeigen
anscheiend muss man bei Group auch die Ausgaben aus der Haupttabelle mit geben?
Was meinst du mit Haupttabelle? Du musst alle Spalten in die GROUP BY Klausel aufnehmen, nach denen es gruppiert werden soll. Wenn zwei verschiedene Datensätze in diesen Spalten übereinstimmen, werden sie zusammengefasst. Wenn du also eine Spalte nicht angegeben hattest und die Datensätze in den anderen Spalten schon übereinstimmten, wurde vermutlich zu viel in einer Gruppe zusammengefasst, also auch das, was in der vergessenen Spalte unterschiedlich war.

Zitat:
Zitat von Mafiose Beitrag anzeigen
Ist die Reihenfolge eigentlich wichtig bei Group by?
Nein, aber sie kann die Sortierung beeinflussen.

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #4 (permalink)  
Alt 19-01-2010, 16:34
Mafiose
 Registrierter Benutzer
Links : Onlinestatus : Mafiose ist offline
Registriert seit: Jan 2010
Beiträge: 5
Mafiose befindet sich auf einem aufstrebenden Ast
Standard

Haupttabele meine ich, die Tabelle die nicht in Left join vorkommt sondern bei "FROM Table"

Ich Versuche mal die Frage anders zu formulieren.

Tabelle A
idA; name
1; X
2; Y

Tabelle B
idB; Buchstabe
20; ABC
21; DEF

Tabelle A_hat_Tabelle B
id_A; id_B
1;20
1;21
2;20

Wenn ich nur nach Buchstabe gruppiere, dann kommt sowas raus?
X; ABC
X; DEF

Wenn ich nach name und Buchstabe gruppiere, dann kommt sowas?
X; ABC
X; DEF
Y; ABC

SQL
PHP-Code:
Select name from TableA
left join Tabelle A_hat_Tabelle B on 
(TableA.idA Tabelle A_hat_Tabelle B.id_A)
left join TableB on (TableB.idB=Tabelle A_hat_Tabelle B.id_BGroup by name,Buchstabe 
zweite Frage spielt es keine rolle ob der Feld nach dem ich gruppiere in Left join vorkommt oder zwischen Select und From Table

also würde das auch gehen? warum?
PHP-Code:
Select name from TableA
left join Tabelle A_hat_Tabelle B on 
(TableA.idA Tabelle A_hat_Tabelle B.id_A)
left join TableB on (TableB.idB=Tabelle A_hat_Tabelle B.id_BGroup by idA,Buchstabe 
Mit Zitat antworten
  #5 (permalink)  
Alt 19-01-2010, 17:14
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von Mafiose Beitrag anzeigen
Wenn ich nur nach Buchstabe gruppiere, dann kommt sowas raus?
X; ABC
X; DEF

Wenn ich nach name und Buchstabe gruppiere, dann kommt sowas?
X; ABC
X; DEF
Y; ABC
Genau, weil der Buchstabe unterschiedlich ist und dieser Unterschied im ersten Fall ignoriert wird, weil der Buchstabe nicht in der GROUP BY Klausel enthalten ist.

Zitat:
Zitat von Mafiose Beitrag anzeigen
zweite Frage spielt es keine rolle ob der Feld nach dem ich gruppiere in Left join vorkommt oder zwischen Select und From Table
Im Standard SQL geht das nicht, aber MySQL erlaubt es.

Zitat:
Zitat von Mafiose Beitrag anzeigen
also würde das auch gehen? warum?
PHP-Code:
Select name from TableA
left join Tabelle A_hat_Tabelle B on 
(TableA.idA Tabelle A_hat_Tabelle B.id_A)
left join TableB on (TableB.idB=Tabelle A_hat_Tabelle B.id_BGroup by idA,Buchstabe 
Besser ist es, nach der ID zu gruppieren (bzw. nach dem Primärschlüssel). Wenn der Name aber eindeutig ist, kommt dasselbe raus. Das Statement ist aber ungültig, denn die ON-Bedingung ergibt keinen Sinn.

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #6 (permalink)  
Alt 19-01-2010, 17:36
Mafiose
 Registrierter Benutzer
Links : Onlinestatus : Mafiose ist offline
Registriert seit: Jan 2010
Beiträge: 5
Mafiose befindet sich auf einem aufstrebenden Ast
Standard

ok so langsam verstehe ich die Klausel Group by

du meinst aber
weil der name nicht in der GROUP BY Klausel enthalten ist.

Warum ist den die ON Bedinung falsch?

PHP-Code:
Select name from TableA 
left join TabelleA_hat_TabelleB on 
(TableA.idA TabelleA_hat_TabelleB.id_A
left join TableB on (TableB.idB=TabelleA_hat_TabelleB.id_BGroup by idA,Buchstabe 
Mit Zitat antworten
  #7 (permalink)  
Alt 19-01-2010, 17:43
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von Mafiose Beitrag anzeigen
weil der name nicht in der GROUP BY Klausel enthalten ist.
Ja, ich dachte, dass ABC eine Name und X bzw. Y ein Buchstabe ist.

Zitat:
Zitat von Mafiose Beitrag anzeigen
Warum ist den die ON Bedinung falsch?

PHP-Code:
Select name from TableA 
left join TabelleA_hat_TabelleB on 
(TableA.idA TabelleA_hat_TabelleB.id_A
left join TableB on (TableB.idB=TabelleA_hat_TabelleB.id_BGroup by idA,Buchstabe 
Diese nicht (die Klammern sind überflüssig), aber vergleich die mal mit der von mir bemängelten - die war falsch.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!

Geändert von AmicaNoctis (19-01-2010 um 17:47 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 20-01-2010, 08:46
Mafiose
 Registrierter Benutzer
Links : Onlinestatus : Mafiose ist offline
Registriert seit: Jan 2010
Beiträge: 5
Mafiose befindet sich auf einem aufstrebenden Ast
Standard

Jepp hast recht.

Weißt du vlt. ob es Sinnvoller ist in SQL Statement die Daten schon so anzupassen oder lieber eine einfachere Select Abfrage und die Daten dann mit PHP anpassen.
Also ist die Performance schlechter oder besser?
Mit Zitat antworten
  #9 (permalink)  
Alt 20-01-2010, 14:19
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Das kann man pauschal nicht sagen. Man sollte jedoch darauf achten, dass die Filterung, Sortierung, Gruppierung der Daten SQL-seitig erfolgen sollte. Wenn du die Daten erstmal verarbeiten musst, um sie filtern, sortieren, gruppieren zu können, dann macht diese Verarbeitung nur SQL-seitig Sinn. Wenn es nur um die Ausgabe geht, ist es egal, wer es macht.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
Antwort

Lesezeichen


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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
mehrere Einträge aufeinmal? Schyla SQL / Datenbanken 5 13-05-2008 11:19
Autocomplete mehrere Einträge strauberry HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 4 13-04-2007 09:11
mehrere einträge auf einmal kyo PHP Developer Forum 8 14-10-2005 00:01
Die nächsten 20 einträge anzeigen ? Skaschy SQL / Datenbanken 6 22-12-2002 17:47
mehrere einträge ändern zimmbi PHP Developer Forum 1 14-12-2002 11:45

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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 an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:20 Uhr.