Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Felder verbinden, group by [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
brauche Webseite ideal für Vereine und Firmen
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Felder verbinden, group by


 
doerfnix
21-11-2011, 14:11 
 
Hallo,

Ich habe bereits google bemüht, aber ich scheine nicht die richtigen Suchworte zu finden. Nun zu meinem Problem:
Ich habe 3 Tabellen :
Tabelle a: Namen, Adresse usw.
Tabelle b: Rufnummern
Tabelle c: Mapping Rufnummern -> Namen

Da Namen mehrer Rufnummern besitzen kann, aber auch eine Rufnummer mehreren namen zugeordnet sein kann, habe ich hier eine n:n verbindung über eine dritte Tabelle gebaut.

Nun möchte sich eine Liste ausgeben :
select a.name, b.rufnummer ... join ... join ... where 1;

Als Antwort bekomme ich dann eine Liste:
Mark 56678
Tobias 45567
Tobias 78945
....

Wie bekomme ich es hin das der Eintrag Tobias nicht doppelt auftaucht, sondern die beiden Rufnummern verbunden werden :
Mark 56678
Tobias 45567;78945
....

Gibt es hier ein Lösung direkt in SQL ? Bisher laufe ich die Liste nochmal durch und verbinde mit PHP die beiden Einträge. Ist etwas unschön das die Gesamtzahl der namen nicht stimmt und ich bei einem Limit teilweise weniger Ergebnisse pro seite angezeigt bekomme.

doerfnix

 
AmicaNoctis
21-11-2011, 14:22 
 
Hallo,

das geht mit der SQL Aggregatfunktion group_concat()

Gruß,

Amica

 
doerfnix
21-11-2011, 15:33 
 
Super, genau das was ich gesucht habe.

Vieleicht noch ne kleine Frage zu meiner Tabelle :

Tabelle a: Namen
Tabelle b: Festnetz Rufnummer, Mobilfunk-Rufnummer
Tabelle c: Mapping Namen ID -> Rufnummern ID und selector 'festnetz oder Mobil',

Abfrage bisher:
select a.*, b.mobil, b.festnetz, c.type from a left join ... left join ....

In PHP werte ich dann den Rufnummern Type aus und Zeige entsprechend die Festnetzrufnummer oder Mobilfunkrufnummer an.

Gibt es auch ne möglichkeit mit SQL direkt die entsprechende Mobil oder festnetzrufnummer zurückzugeben ?

Leider ist es aus anderen Gründen nicht möglich tabelle b anders aufzubauen.

doerfnix

 
AmicaNoctis
21-11-2011, 16:14 
 
Du kannst gerne 2 mal mit unterschiedlichen Bedingungen auf die Telefonnummerntabelle joinen, dann hast du Festnetz und Mobil in getrennten Spalten.

 
doerfnix
21-11-2011, 16:15 
 
OK, hier habe ich dann doch nochmal selber geschaut und dazu
CASE .. WHEN .. THEN .. ELSE .. END

gefunden

Danke für alle die sich gedanken gemacht haben

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 13:44 Uhr.