php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 12.04.2011, 19:19  
Benutzer
 
Registriert seit: 12.04.2011
Beiträge: 43
PHP-Kenntnisse:
Fortgeschritten
Steeno befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Selectabfrage mit 2 Tabellen und 1 Zuordnungstabelle

Hallo,
ich hab da ein Problem, schon mal danke für eure Antworten.

Also, es gibt 3 Tabellen:

1. Tabelle "Mitarbeiter"
ma_id | name
-------------
1 Jens
2 Ines
3 Maik
...

1. Tabelle "Projekte"
prj_id | projekt
-------------
1 Malen
2 Rechnen
3 Schreiben
4 Telefonieren
5 Laufen
6 Springen
...


3. Tabelle "Zuordnung"
zuordnung_id | ma_id | prj_id
1 | 1 | 1
2 | 1 | 2
3 | 1 | 4
4 | 2 | 1
5 | 2 | 6
...


Folgendes soll raus kommen
Ma1 | Projekte als weitere Spalten
Ma2 | Projekte als weitere Spalten
Ma3 | Projekte als weitere Spalten
...

Gibt es eine SELECT-Abfrage die so eine Tabelle ausgeben kann, wobei der Mitarbeitername nur einmal auftreten darf.
Ich danke euch für einen Lösungsvorschlag .
Steeno ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 12.04.2011, 19:23  
Erfahrener Benutzer
 
Benutzerbild von wolf29
 
Registriert seit: 17.03.2010
Beiträge: 1.833
PHP-Kenntnisse:
Fortgeschritten
wolf29 wird schon bald berühmt werdenwolf29 wird schon bald berühmt werden
Standard

Ja, gibt es. Ist aber nicht wirklich ne fortgeschrittenen Frage! Stichwort könnte für Dich GROUP BY sein.

mfg Wolf29
__________________
while (!asleep()) sheep++;

Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.
wolf29 ist offline   Mit Zitat antworten
Alt 12.04.2011, 19:28  
Benutzer
 
Registriert seit: 12.04.2011
Beiträge: 43
PHP-Kenntnisse:
Fortgeschritten
Steeno befindet sich auf einem aufstrebenden Ast
Standard

hallo, danke erstmal.

ja das hatte ich ja schon versucht.
Aber es ist ja möglich, das der Mitarbeiter mehrere Projekte hat und wenn ich dann GROUP BY auf Mitarbeiter setzte, wird ja nur der Mitarbeitername mit dem 1 Projekt was gefunden wurde angezeigt.
Steeno ist offline   Mit Zitat antworten
Alt 12.04.2011, 19:40  
Erfahrener Benutzer
 
Benutzerbild von wolf29
 
Registriert seit: 17.03.2010
Beiträge: 1.833
PHP-Kenntnisse:
Fortgeschritten
wolf29 wird schon bald berühmt werdenwolf29 wird schon bald berühmt werden
Standard

Zeig mal bitte dein SQL Statement dafür.
__________________
while (!asleep()) sheep++;

Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.
wolf29 ist offline   Mit Zitat antworten
Alt 12.04.2011, 19:43  
Benutzer
 
Registriert seit: 12.04.2011
Beiträge: 43
PHP-Kenntnisse:
Fortgeschritten
Steeno befindet sich auf einem aufstrebenden Ast
Standard

SELECT ma.ma_nname, projekt.prj_kurz
FROM ma_prj_zuordnung
LEFT JOIN ma ON ma.ma_id=ma_prj_zuordnung.ma_id
LEFT JOIN projekt ON projekt.prj_id=ma_prj_zuordnung.prj_id
GROUP BY ma.ma_nname
Steeno ist offline   Mit Zitat antworten
Alt 12.04.2011, 20:09  
hts
Erfahrener Benutzer
 
Registriert seit: 07.09.2010
Beiträge: 722
PHP-Kenntnisse:
Fortgeschritten
hts befindet sich auf einem aufstrebenden Ast
Standard

GROUP_CONCAT wäre eine Möglichkeit.

Ansonsten im Script die gewünschte Ausgabe erzeugen, Stichwort "Gruppenwechsel".
hts ist offline   Mit Zitat antworten
Alt 12.04.2011, 21:21  
Benutzer
 
Registriert seit: 12.04.2011
Beiträge: 43
PHP-Kenntnisse:
Fortgeschritten
Steeno befindet sich auf einem aufstrebenden Ast
Standard

ja, gruppenbruch, danke dir
Steeno ist offline   Mit Zitat antworten
Alt 12.04.2011, 23:54  
Neuer Benutzer
 
Registriert seit: 11.02.2011
Beiträge: 18
PHP-Kenntnisse:
Anfänger
Schraubendreher befindet sich auf einem aufstrebenden Ast
Standard

Macht die Spalte "zuordnung_id" hier Sinn? Ich habe mich bisher bei Zuordnungstabellen an diesen Design gehalten, bin allerdings auch erst ein Einsteiger.

Steeno, wenn du eine Lösung gefunden hast, würde es mich freuen, wenn du sie hier postest. Ich stehe quasi vor dem gleichen Problem.

Gute Nacht!
Schraubendreher ist offline   Mit Zitat antworten
Alt 13.04.2011, 19:51  
Benutzer
 
Registriert seit: 12.04.2011
Beiträge: 43
PHP-Kenntnisse:
Fortgeschritten
Steeno befindet sich auf einem aufstrebenden Ast
Standard

Also damit funktioniert es erst einmal:

PHP-Code:
        while($d_malist mysql_fetch_array($q_malist)){

            if(
$wert != $d_malist['ma_nname']){
                
$wert $d_malist['ma_nname'];
                
                
// neue Zuweisung für Gruppenbruch
                
$last_wert $wert;
            }
            

            foreach(
$projekteid as $value){

                
// Gruppenbruch - Mitarbeitername
                
if ($last_wert == $wert) {
                    echo 
"<tr><td width=\"125\">" $wert "</td>";
                    unset(
$last_wert);
                }
                
                
// Projekte
                
if($value == $d_malist['prj_id']){
                    echo 
"<td width=\"35\">" $d_malist['prj_id'] . "</td>";
                }
            }
        } 
Allerdings liegt das nächste Problem darin, die Projekte alle sortiert in Spalten untereinander zu bekommen.
Beispiel (P = Projekt):
Code:
MA1		P1	P2	-	P3	-
MA2		P1	-	-	P3	-
MA3		-	-	-	-	P4
Man könnte das vielleicht mit mehrdimensionalen Arrays lösen,
wobei der Mitarbeitername ein Array mit den dazugehörigen Projekten ist, aber daran scheitere ich gerade.

ich wollte statt:
PHP-Code:
echo "<tr><td width=\"125\">" $wert 
dieses hier machen:
PHP-Code:
$ergebnis[$wert][$key] = $wert
aber es funktioniert nicht.
Hat vielleicht noch jemand einen Tipp?

Geändert von Steeno (13.04.2011 um 21:15 Uhr).
Steeno ist offline   Mit Zitat antworten
Alt 13.04.2011, 21:06  
hts
Erfahrener Benutzer
 
Registriert seit: 07.09.2010
Beiträge: 722
PHP-Kenntnisse:
Fortgeschritten
hts befindet sich auf einem aufstrebenden Ast
Standard

Ich hatte gerade Langeweile
Also im groben würde ich das DB-Result erstmal durchlaufen und alle Ergebnisse sammeln. Anschließend das entstandene Ergebnisarray nochmals durchlaufen und HTML generieren.
Ich gehe davon aus, dass du alle Projekt ausgeben möchtest, auch wenn diese eventuell in keinem Datensatz vorhanden sind?

PHP-Code:
// Projekte auslesen
// Key ist die ID, Value ist der Projektname
$projects = array();

// Leeres Default-Array für die Projekte der einzelnen Mitarbeiter
// Enthält nur die IDs
$default_projects = array();

$sql_projects 'SELECT prj_id, projekt FROM Projekte ORDER BY projekt';
$result_projects mysql_query($sql_projects$database_link);

while(
is_array($row_projects mysql_fetch_array($result_projects)))
{
    
$projects[$result_projects['prj_id']] = $result_projects['projekt'];
    
$default_projects[$result_projects['prj_id']] = '';
}


// Jetzt kommt deine Abfrage
// Wir sammeln erstmal alle Ergebnisse im Result-Array
// Key ist der Mitarbeitername, Value ist ein Array mit den Projekten
$result = array();

// Was bedeutet eigentlich dein Prefix 'd'?
// 'q' soll ja wohl Query heißen, obwohl es das Abfrageergebnis ist
// ... nur mal so angemerkt
while($d_malist mysql_fetch_array($q_malist))
{
    
// Wenn es den Mitarbeiter noch nicht gibt, dann ein neuen Eintrag erstellen,
    // mit allen vorhandenen Projekten
    
if(!isset($result[$d_malist['ma_nname']]))
    {
        
$result[$d_malist['ma_nname']] = $default_projects;
    }

    
// Projekt (-Namen) zuweisen
    
$project $projects[$d_malist['projektid_feld']];
    
$result[$d_malist['ma_nname']][$d_malist['projektid_feld']] = $project;
}


// Testausgabe
echo '<pre>'.print_r($resulttrue).'</pre>';

// todo: Schleife mit HTML-Ausgabe
// ... 
Der Code ist ungetestet, könnte aber vielleicht auf Anhieb laufen Deine Abfrage solltest du aber vorher noch einfügen
hts ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

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 an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Suche zwischen 2 Tabellen larabad PHP Einsteiger 11 30.03.2011 11:59
Daten aus 2 Tabellen ausgeben und sortieren moprhoyz Datenbanken 1 06.03.2011 22:29
RENAME TABLE - mehrere Tabellen gleichzeitig umbenennen? thombhitz Datenbanken 1 09.02.2011 03:46
[Erledigt] 2 Tabellen abgleichen und Inhalte übernehmen... Abweichler PHP Tipps 2010 3 29.07.2010 20:23
leere Tabellen löschen TobiasH Datenbanken 12 14.06.2010 16:08
Tabellen mittels Formular erzeugen Basti2o1o PHP Tipps 2010 13 05.05.2010 15:05
Mehrer Tabellen aus Datenbank auslesen? Blade JavaScript, Ajax und mehr 5 17.11.2009 16:08
[Erledigt] Mehrere MySQL Tabellen mit PHP abfragen DonMuchacho Datenbanken 7 27.07.2009 19:47
Tabellen miteinander verknüpfen Suzi Datenbanken 12 27.05.2009 11:40
[Erledigt] Limit auf Ergebnissumme mehrerer Tabellen Frank Datenbanken 8 02.09.2008 11:33
Tabellen für Vokabeltrainer anlegen... anonym01 PHP Tipps 2008 9 03.03.2008 21:18
PHP Array in MYSQL Tabellen schreiben Matt Datenbanken 1 26.02.2008 19:43
einträge aus 2 tabellen sortieren Tschuu Datenbanken 11 20.12.2005 08:21
[Erledigt] Selectanfrage an eine Datenbank,aber aus mehreren Tabellen Datenbanken 2 26.10.2004 07:23

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
select 2 tabellen, select abfrage über 2 tabellen, select anweisung in tabelle schreiben, select abfrage aus 2 tabellen, mysql vorhandene spalte mit nicht vorhandener spalte abgleichen, sql statement select auf 3 tabellen mit zuordnung, 2 selects abfrage, select einer tabelle über zwei tabellen, select auf 2 tabellen, php select aus mehreren tabellen echo, select abfrage in tabelle, php 2 tabelle, mysql abfrage über zuordnungstabelle, 2 tabellen in einem select ausgeben, 1*1 tabelle php, select 2 tabellen mit tabellen zuordnung, 2 tabellen mit namen spaltenweise zuordnen, mysql zwei selectabfragen in 1, selctabfrage 2 tabellen, select from mehrere tabellen

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:35 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum