| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

14-08-2010, 16:15
|
|
SqlPhpNovize
Registrierter Benutzer
|
|
Registriert seit: Aug 2010
Beiträge: 6
|
|
Mehrere Zeilen einer Tabelle in eine Ergebniszeile, Gruppenbruch?
Hallo,
ich habe eine Namenstabelle, die über den Schlüssel IDNamen mit einer Berufstabelle verknüpft ist. Namen sind Unikate, aber jeder Name kann mehrere Berufe haben (1:n). Wie bekomme ich jetzt bei einer Abfrage (select) die verschiedenen Berufe in eine Ergebniszeile? Ich habe gelesen, dass das mit einem "Gruppenbruch" funktionieren solle, habe aber nicht wirklich eine Ahnung wie das gegen soll, WEIL:
Ich gebe die Daten mit einer Tabellenfunktion aus, die schon ein Array benutzt. Ein Array im Array, geht das?
PHP-Code:
function tab_out($result) { $num = mysql_num_rows($result); for ($j = 0; $j < $num; $j++) { $row = mysql_fetch_array($result); echo "<table width='100%' border='0' cellspacing='2' cellpadding='0' height='16' class='texttab'>"; echo "<tr><td>$row[0]</td></tr>"; //es gibt die $rows[0-15]
Die Berufe sind im $row[13] (neben anderen Daten aus den Tabellen). Soll das dann $row[13.1] sein, oder wie?
Ich könnte auch in der Ursprungstabelle selbst alle Berufe einer ID in ein Feld kopieren, was aber keine sehr elegante Lösung ist.
Sorry für die blöde Frage. Danke
Geändert von SqlPhpNovize (15-08-2010 um 10:17 Uhr)
|

14-08-2010, 16:18
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Und wo liegt jetzt dein Problem?
Wenn du dich über das Verfahren des Gruppenbruchs informiert hast, und verstanden hast, was zu tun ist - dann brauchst du es doch nur noch umsetzen.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

14-08-2010, 16:36
|
|
SqlPhpNovize
Registrierter Benutzer
|
|
Registriert seit: Aug 2010
Beiträge: 6
|
|
Das ist ja das Problem, dass ich nicht verstehe, wie man das umsetzen muss. Bin Anfänger. Verstehe eben nicht, wie ich die Schleife, die je Durchlauf die Ergebnisse aus der Datenbank ausgibt, dazu bringe, die Daten des nächsten, übernächsten Durchlaufs vorauszunehmen und schon beim ersten Mal als gemeinsamen String auszugeben. Da müßte ich ja für jede Spalte, die Mehrfachwerte hat, nochmal eine "interne" Schleife programmieren, die alle Ergebnisse der Spalte ausgibt.
Geändert von SqlPhpNovize (15-08-2010 um 08:43 Uhr)
|

15-08-2010, 00:00
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hallo,
hilft dir mein Blogeintrag zu dem Thema vielleicht weiter?
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! 
|

15-08-2010, 09:19
|
|
SqlPhpNovize
Registrierter Benutzer
|
|
Registriert seit: Aug 2010
Beiträge: 6
|
|
Gruppenbruch
Vielen Dank, schon frustrierend, dass alles was ich nicht verstehe immer so einfach zu lösen ist.
Aber doch nicht ganz: Habe meinen Code folgendermaßen ergänzt ($row[19] enthält die ID).
ALT:
PHP-Code:
echo "<tr><td>"; echo mysql_field_name($result,13); echo "</td>"; echo "<td>$row[13]</td></tr>";
NEU:
PHP-Code:
echo "<tr><td>"; echo mysql_field_name($result,13); echo "</td>"; $array = array(); foreach ($rows as $row) { $array[$row[13]][$row[19]][] = $row; } echo "<td>$array</td></tr>";
Leider bekomme ich da die Fehlermeldung:
Invalid argument supplied for foreach()
Danke
Robert
Geändert von SqlPhpNovize (15-08-2010 um 09:39 Uhr)
|

15-08-2010, 09:35
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Bitte bearbeite jetzt erstmal deine Beiträge mit dem  -Button, danach [Erweitert] und dort benutzt du die Code-Tags (siehe meine Signatur).
Danach überlegst du mal, warum es bei dir keine Variable $rows gibt, aber dennoch irgendetwas aus dem man mehrmals eine $row abrufen kann und ob du nicht lieber das Ding an Stelle der foreach-Schleife benutzen willst.
__________________
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! 
|

15-08-2010, 09:47
|
|
SqlPhpNovize
Registrierter Benutzer
|
|
Registriert seit: Aug 2010
Beiträge: 6
|
|
Hallo Freundin der Nacht!
Habe meinen Beitrag geändert 
Aber ich stehe wohl immer noch auf der Leitung:
Du meinst wohl die Result-Variable, aber das funzt auch nicht
PHP-Code:
foreach ($result as $row) { $array[$row[13]][$row[19]][] = $row; }
Amicus Aurorae
Geändert von SqlPhpNovize (15-08-2010 um 09:50 Uhr)
|

15-08-2010, 09:54
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
In deinem Falle musst du ganz von dem foreach weg und mit
PHP-Code:
while ($row = mysql_fetch_array($result)) { // ... }
arbeiten. Wenn dich diese Zahlen (z. B. $row[ 13]) nicht glücklich machen, nimm mysql_fetch_assoc. Dann kannst du auf die Felder mit Spaltennamen zugreifen (z. B. $row['first_name']).
Bitte auch den ersten Beitrag noch anpassen. Danke.
__________________
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 (15-08-2010 um 09:57 Uhr)
|

15-08-2010, 10:46
|
|
SqlPhpNovize
Registrierter Benutzer
|
|
Registriert seit: Aug 2010
Beiträge: 6
|
|
"nimm mysql_fetch_assoc" -> werde ich machen, super Tipp!
Ich habe das jetzt so geändert:
PHP-Code:
echo "<td width='93%'>"; while ($row = mysql_fetch_array($result)){ echo $row[13]." "; } echo "</td></tr>";
Beim ersten Datensatz, der Berufsangaben enthält, werden die Berufe auch richtig aneinandergereiht.
Aber alle folgenden Daten werden unterdrückt.
Das Ergebnis (bitte etwas nach unten scrollen):
http://www.oeaw.ac.at/kmf/cvp/demos/...p#$Name="Klug"
Danke Robert
|

15-08-2010, 10:52
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Ich meinte das so:
PHP-Code:
$array = array(); while ($row = mysql_fetch_array($result)) { $array[$row[13]][$row[19]][] = $row; }
Dann siehst du dir erstmal in aller Ruhe mit print_r an, wie $array aufgebaut ist und überlegst deine weiteren Schritte.
Zitat:
Zitat von SqlPhpNovize
http://www.oeaw.ac.at/kmf/cvp/demos/Bio.php#$Name="Klug"
|
Da kommt (nach einiger Zeit) nur:
Zitat:
Notice: Undefined index: Bio in /usr/local/www/data/kmf_cvp/demos/Bio.php on line 6
Notice: Undefined index: Jahrmin in /usr/local/www/data/kmf_cvp/demos/Bio.php on line 7
Notice: Undefined index: Jahrmax in /usr/local/www/data/kmf_cvp/demos/Bio.php on line 8
Incorrect key file for table '/tmp/#sql_a5d_0.MYI'; try to repair it
|
__________________
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! 
|

15-08-2010, 11:24
|
|
SqlPhpNovize
Registrierter Benutzer
|
|
Registriert seit: Aug 2010
Beiträge: 6
|
|
Sorry, ich bekomme das nicht hin, trotzdem vielen Dank. Das Problem liegt wohl am ($row = mysql_fetch_array($result), das ja schon am Anfang der Tabellenausgabe steht, also in deiner while-Schleife ein zweites Mal erscheint. Das verträgt sich irgendwie nicht. Ich werde Wohl oder Übel jemanden dafür engagieren müssen. Vielleicht kennst ja jemanden, der so kleine Sache gegen Bezahlung macht.
LG Robert
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| 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.
HTML-Code ist aus.
|
|
|
|
PHP News
|