WinFuture-Forum.de: [erledigt] MySQL Einträge "gruppiert" ausgeben - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

[erledigt] MySQL Einträge "gruppiert" ausgeben


#1 Mitglied ist offline   J000S 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.051
  • Beigetreten: 13. Juni 09
  • Reputation: 38
  • Geschlecht:Männlich
  • Wohnort:C:\Home
  • Interessen:Computer, Feuerwehr, Sport

geschrieben 31. Juli 2012 - 21:03

Hallo alle zusammen.

Ich hab hier eine Tabelle mit 3 Spalten:

ID, benutzer und match

ID ist unique und auto-increment. benutzer und match sind zusammen unique. also kann das da so aussehen:

1 | Max | Muster
2 | Jan | Muster
3 | Jan | Skizze

Das Eintragen hab ich hinbekommen. Nur frage ich mich wie ich das in Form einer Übersicht ausgeben kann....

Es sollte so angezeigt werden:

Muster: Max, Jan
Skizze: Jan

ich hoffe das war einigermaßen verständlich und mir kann da einer helfen.

Dieser Beitrag wurde von J000S bearbeitet: 01. August 2012 - 16:16

0

Anzeige



#2 Mitglied ist offline   Holger_N 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.111
  • Beigetreten: 11. September 10
  • Reputation: 458
  • Geschlecht:Männlich

geschrieben 31. Juli 2012 - 21:48

Also ich würde den kompletten Datensatz sortiert nach match abfragen.

dann die einzelnen Werte in Arrays schreiben und dann in einer Schleife ausgeben, zuerst $match($durchlauf), dann $name($durchlauf) und wenn bei der nächsten Runde der Schleife $match($durchlauf) = $match($durchlauf-1) ist, $name($durchlauf) in die gleiche Reihe und wenn nicht, eine neue Reihe mit $match($durchlauf) anfangen.


Beispiel (noch nicht ausprobiert, Tippfehler möglich)

<?php

$abfrage = $sql->query("SELECT * FROM t_tabelle ORDER BY matcht;");



while ($daten = $abfrage->fetch())
{
$name[] = $daten['name'];
$match[] = $daten['matcht'];
}

$anzahl = count($name);
$laufende_nummer = 1;

for ($durchlauf = 0; $durchlauf < $anzahl; $durchlauf++)

{
if ($match[$durchlauf] == $match[$durchlauf-1])
  {
    echo(' | '.$name[$durchlauf]);
  }
  else
  {
    echo('<br />'.$laufende_nummer.' | '.$match[$durchlauf].' | '.$name[$durchlauf]);

  $laufende_nummer++;
  }


  
}


?>



oder

Den Datensatz gruppiert nach match abfragen und dann ausgeben und innerhalb der jeweiligen Ausgabe ein weitere Abfrage der einzelnen Namen zum entsprechenden match machen.


oder

ein mySQL-held kennt eine Abfrage, die Letzteres in einem kann.

Dieser Beitrag wurde von Holger_N bearbeitet: 31. Juli 2012 - 22:53

Bauernregel: Regnets mächtig im April, passiert irgendwas, was sich auf April reimt.
0

#3 Mitglied ist offline   __42__ 

  • Gruppe: aktive Mitglieder
  • Beiträge: 38
  • Beigetreten: 10. März 12
  • Reputation: 5

geschrieben 31. Juli 2012 - 22:11

Beitrag anzeigenZitat (J000S: 31. Juli 2012 - 21:03)

ID ist unique und auto-increment. benutzer und match sind zusammen unique. also kann das da so aussehen:

1 | Max | Muster
2 | Jan | Muster
3 | Jan | Skizze

Es sollte so angezeigt werden:

Muster: Max, Jan
Skizze: Jan

SELECT b.name, GROUP_CONCAT(b.vorname) FROM benutzer b GROUP BY b.name


0

#4 Mitglied ist offline   J000S 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.051
  • Beigetreten: 13. Juni 09
  • Reputation: 38
  • Geschlecht:Männlich
  • Wohnort:C:\Home
  • Interessen:Computer, Feuerwehr, Sport

geschrieben 31. Juli 2012 - 22:46

@Holger_N und __42__ danke schon mal für eure Hilfe :)

@__42__ Mit deinem kann ich nicht so viel anfangen... wofür steht dieses b?


@Holger_N

hab deins mal übernommen... bekomme folgende Meldung:

Zitat

Fatal error: Call to a member function query() on a non-object in /customers/c/[...]match_register.php on line 70


Line 70 ist diese:

$abfrage = $sql->query("SELECT * FROM pvp_match ORDER by match ;");


Das Prinzip von deinem ist mir klar, aber die Fehlermeldung irritiert mich etwas...

--------
ich hatte folgendes mal versucht...

$query = "SELECT * FROM `pvp_match`";
$result = mysql_query($query) or die(mysql_error());


while($row = mysql_fetch_array($result))
{
	echo $row['match'].": ".$row['benutzer']."<br />";
}

da kommen halt hintereinander alle Einträge. Also nicht so das was ich mir dachte Eingefügtes Bild
0

#5 Mitglied ist offline   __42__ 

  • Gruppe: aktive Mitglieder
  • Beiträge: 38
  • Beigetreten: 10. März 12
  • Reputation: 5

geschrieben 31. Juli 2012 - 22:51

Beitrag anzeigenZitat (J000S: 31. Juli 2012 - 22:46)

@Holger_N und __42__ danke schon mal für eure Hilfe :)

@__42__ Mit deinem kann ich nicht so viel anfangen... wofür steht dieses b?

Ist nur ein Alias für die Tabelle Benutzer um Tipparbeit zu sparen.
0

#6 Mitglied ist offline   Holger_N 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.111
  • Beigetreten: 11. September 10
  • Reputation: 458
  • Geschlecht:Männlich

geschrieben 31. Juli 2012 - 22:52

Benenne mal die Spalte "match" um (ich hab mal ein "t" drangehängt, in der Datenbank natürlich auch und dann gehts). Ich glaub dieses Wort macht Ärger (irgendwas Belegtes bestimmt) und dann ist mir noch die laufende Nummer verrutscht, die muß in die Klammer vorher mit rein. Hab das im Beispiel mal geändert.

Achso, wirst du aber bemerkt haben, deine Spalte "benutzer" ist bei mir "name"

Noch ein Achso, ich mache die Datenbankabfrage über PDO.

Dieser Beitrag wurde von Holger_N bearbeitet: 31. Juli 2012 - 23:06

Bauernregel: Regnets mächtig im April, passiert irgendwas, was sich auf April reimt.
0

#7 Mitglied ist offline   J000S 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.051
  • Beigetreten: 13. Juni 09
  • Reputation: 38
  • Geschlecht:Männlich
  • Wohnort:C:\Home
  • Interessen:Computer, Feuerwehr, Sport

geschrieben 31. Juli 2012 - 23:15

hmm habs umbenannt. bekomme trotzdem noch diese Meldung

das mit dem namen ist mir nicht aufgefallen ^^

ohne PDO wäre es mysql_query(); richtig?

Dieser Beitrag wurde von J000S bearbeitet: 31. Juli 2012 - 23:16

0

#8 Mitglied ist offline   __42__ 

  • Gruppe: aktive Mitglieder
  • Beiträge: 38
  • Beigetreten: 10. März 12
  • Reputation: 5

geschrieben 31. Juli 2012 - 23:23

Beitrag anzeigenZitat (__42__: 31. Juli 2012 - 22:11)

SELECT b.name, GROUP_CONCAT(b.vorname) FROM benutzer b GROUP BY b.name



Ach, da ich das Schema überlesen habe:
Bei mir ist es eine Benutzer-Tabelle mit id, vorname, nachname, aber sollte ja nicht schwer sein Tabellenname und Spaltennamen anzupassen.
0

#9 Mitglied ist offline   J000S 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.051
  • Beigetreten: 13. Juni 09
  • Reputation: 38
  • Geschlecht:Männlich
  • Wohnort:C:\Home
  • Interessen:Computer, Feuerwehr, Sport

geschrieben 31. Juli 2012 - 23:40

Ah! Habs erfolgreich bearbeitet:

$abfrage = mysql_query("SELECT * FROM tabelle ORDER BY matcht");


while ($daten = mysql_fetch_assoc($abfrage))
{
$benutzer[] = $daten['benutzer'];
$match = array($daten['matcht']);
}

$anzahl = count($benutzer);
$laufende_nummer = 1;

for ($durchlauf = 0; $durchlauf < $anzahl; $durchlauf++)

{
if ($match[$durchlauf] == $match[$durchlauf-1])
  {
	echo(' | '.$benutzer[$durchlauf]);
  }
  else
  {
	echo('<br />'.$laufende_nummer.' | '.$match[$durchlauf].' | '.$benutzer[$durchlauf]);

  $laufende_nummer++;
  }

}



ich musste die mysql Abfrage bearbeiten und das $match[] ohne die [] schreiben.. sonst gabs ne Fehlermeldung. Bei $benutzer[] komischerweise nicht..

Dieser Beitrag wurde von J000S bearbeitet: 31. Juli 2012 - 23:42

0

#10 Mitglied ist offline   Holger_N 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.111
  • Beigetreten: 11. September 10
  • Reputation: 458
  • Geschlecht:Männlich

geschrieben 31. Juli 2012 - 23:42

Müßte dann so sein (mit umbenannter Spalte "matcht" statt "match") Moment - nochmal auf dein Oberes hin geändert:

$abfrage = mysql_query("SELECT matcht, GROUP_CONCAT(benutzer) FROM tabelle GROUP BY matcht");


while ($daten = mysql_fetch_assoc($abfrage))
{
echo $daten['matcht']." | ".$daten['GROUP_CONCAT(benutzer)']."<br />" ;
}


Dieser Beitrag wurde von Holger_N bearbeitet: 31. Juli 2012 - 23:52

Bauernregel: Regnets mächtig im April, passiert irgendwas, was sich auf April reimt.
0

#11 Mitglied ist offline   J000S 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.051
  • Beigetreten: 13. Juni 09
  • Reputation: 38
  • Geschlecht:Männlich
  • Wohnort:C:\Home
  • Interessen:Computer, Feuerwehr, Sport

geschrieben 31. Juli 2012 - 23:59

Jap so läufts. Nur dass jetzt nach der Schleife nichts mehr angezeigt wird.

d.h. alles was z.B. im Footer ist wird nicht geladen/angezeigt. Im Seitenquelltext ist das letzte der <br /> Tag der while Schleife :unsure:
0

#12 Mitglied ist offline   Holger_N 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.111
  • Beigetreten: 11. September 10
  • Reputation: 458
  • Geschlecht:Männlich

geschrieben 01. August 2012 - 00:12

Irgendwas im weiteren Verlauf, was die Ausgabe anhalten könnte? (Muß dann aber langsam mal los, morgen ist ein schwerer Tag und übermorgen auch und dann Freitag nochmal und dann hab ich Zeit)

Dieser Beitrag wurde von Holger_N bearbeitet: 01. August 2012 - 00:14

Bauernregel: Regnets mächtig im April, passiert irgendwas, was sich auf April reimt.
0

#13 Mitglied ist offline   J000S 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.051
  • Beigetreten: 13. Juni 09
  • Reputation: 38
  • Geschlecht:Männlich
  • Wohnort:C:\Home
  • Interessen:Computer, Feuerwehr, Sport

geschrieben 01. August 2012 - 00:17

Hm. Also diese Seite wird inkludiert. Danach kommt eigentlich nur das:

</div>
    	<div id="rand2"></div>
  	</div>
  	</div>
	<div class="footer">
		<center>Copyright &copy; 2011 - <?php echo date(Y); ?> by Jonas Struckamp
    	<br />
		<a href="index.php?page=impressum">Impressum</a>
    	<br />
    	<?php
		if(isset($_SESSION['login']))
		{
			if($_SESSION['login'] === "Jonas")
			{
				echo '<a href="index.php?page=admin">Administrations Bereich</a><br />';
			}
		}
		?>
    	</center>
    	<br />
	</div>
</div>
</body>
</html>


Zitat

Muß dann aber langsam mal los, morgen ist ein schwerer Tag und übermorgen auch und dann Freitag nochmal und dann hab ich Zeit


Ich hab Urlaub :P ;) Vielleicht finde ich oder jmand anderes ja den Fehler in der Zeit ;D

Dieser Beitrag wurde von J000S bearbeitet: 01. August 2012 - 00:19

0

#14 Mitglied ist offline   J000S 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.051
  • Beigetreten: 13. Juni 09
  • Reputation: 38
  • Geschlecht:Männlich
  • Wohnort:C:\Home
  • Interessen:Computer, Feuerwehr, Sport

geschrieben 01. August 2012 - 00:28

Hui Fehler gefunden:

hab es eigentlich fast so gehabt, wie du

while ($daten = mysql_fetch_assoc($abfrage))



nur dass ich ein die(mysql_error()) rein gemacht hab... das hat den Fehler wohl verursacht.
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0