kyrinja
Goto Top

PHP Tabellen automatisch nach Gruppen ID aus MYSQL erstellen

Hallo liebe Gemeinde,

ich sitze z.Z an einer Fahrzeugübersicht für unsere Feuerwehr. Hier würde ich gerne Tabellen dynamisch je nach GruppenID des Fahrzeuges generieren. Also
5 Fahrzeuge haben Gruppe 1 4 Gruppe 2 etc und jeweils eine neue Tabelle dafür erzeugen. Dies funktioniert auch soweit jedoch würde ich das ganze einfacher gestalten.
Wenn ich nun eine neue Gruppe erzeugen will muss ich erst den kompletten Quellcode editiieren. Gibt es hier eine einfachere Lösung ?


Hier meine bisherige Lösung.
<?php
 
 include("include/conf.inc");  

$ergebnis = mysql_query("select * from Fahrzeuge where AGruppeID = '1'");  
$ergebnis2 = mysql_query("select * from Fahrzeuge where AGruppeID = '2'");  
$ergebnis3 = mysql_query("select * from Fahrzeuge where AGruppeID = '3'");  
$ergebnis4 = mysql_query("select * from Fahrzeuge where AGruppeID = '4'");  
$ergebnis5 = mysql_query("select * from Fahrzeuge where AGruppeID = '5'");  
$anzahl = mysql_num_rows($ergebnis);
$anzahl2 = mysql_num_rows($ergebnis2);
$anzahl3 = mysql_num_rows($ergebnis3);
$anzahl4 = mysql_num_rows($ergebnis4);
$anzahl5 = mysql_num_rows($ergebnis5);
$statuscode = mysql_query("SELECT * FROM Status order by status");  


?> 

<table>
<tr>
<td>
<table id="Fahrzeuge">  

<tr>
<th>Ort</th>
<th>Rufname</th>
<th>Fahrzeug</th>
<th>FahrzeugID</th>
<th>Status</th>
<th>abgegeben</th>
<th>Senden</th>
</tr>
<?
for ($i = 0; $i < $anzahl; $i++) {
    $id = mysql_result($ergebnis, $i, "ID");  
	$GroupID = mysql_fetch_array(mysql_query("select AGruppeID from Fahrzeuge where FahrzeugID = '$fahrzeugid'"));  
    $fahrzeugid = mysql_result($ergebnis, $i, "FahrzeugID");  
    $ort = mysql_result($ergebnis, $i, "ort");  
    $funkrufname = mysql_result($ergebnis, $i, "funkrufname");  
    $fahrzeug = mysql_result($ergebnis, $i, "fahrzeug");  
    $status = mysql_fetch_array(mysql_query("Select Status from log where FahrzeugID = '$fahrzeugid' ORDER BY `ID` DESC"));  
    $date = mysql_fetch_array(mysql_query("Select Time from log where FahrzeugID = '$fahrzeugid' ORDER BY `ID` DESC"));  
    $option = '<form action=insert.php method="post">  
		<input type="hidden" name="FahrzeugID" value=' . $fahrzeugid . '>  
		<select name="status">  
		<option value="0">0 - Notruf</option>   
        <option value="1">1 - Einsatzbereit auf Funk</option>   
        <option value="2">2 - Einsatzbereit auf Wache</option>   
        <option value="3">3 - Einsatzauftrag &uuml;bernommen</option>   
        <option value="4">4 - Ankunft an der Einsatzstelle</option>  
		<option value="5">5 - Sprechwunsch</option>  
		<option value="6">6 - Au&szlig;er Dienst</option>  
		<option value="7">7 - Patient &uuml;bernommen</option>  
		<option value="8">8 - Ankunft am Zielort</option>  
		<option value="9">9 - Verstanden / Best&auml;tigung</option>  
		<input type="submit" value="senden" /></form>';  


    print "<tr><td>" . $ort . "</td><td>" . $funkrufname . "</td><td>" . $fahrzeug .  
        "</td><td>" . $fahrzeugid . "</td><td style=" . ($status == "1" ?  
        'background-color:#2ab001' : ($status == "2" ? 'background-color:#39ee01' : ($status ==  
        "3" ? 'background-color:#ff5252' : ($status == "4" ?  
        'background-color:#fb0101' : ($status == "5" ? 'background-color:#ea00e0' : ($status ==  
        "6" ? 'background-color:#5a5a5a' : ($status == "7" ?  
        'background-color:#00c6d6' : ($status == "8" ? 'background-color:#005eff' : ($status ==  
        "9" ? 'background-color:yellow' : ($status == "0" ?  
        'background-color:#9c0000' : 'background-color:#000000')))))))))) . ">" . $status .  
        "</td><td>" . date("G:H:s d.m.Y ", strtotime($date)) . "</td><td>" . $option .  
        "</td><td>" . $GroupID ."</td></tr>\n";  
}

?> 
</table>
</td>

Wie Ihr seht kopiere ich die Tabelle mehrfach und füttere Sie oben jeweils mit den ID´s. Gibts da vll auch eine andere ohne das ich jedesmal wenn ich eine neue Gruppe anlege alles kopieren muss.


Wäre euch für Hilfe sehr dankbar!

Content-Key: 300856

Url: https://administrator.de/contentid/300856

Ausgedruckt am: 29.03.2024 um 14:03 Uhr

Mitglied: 114757
114757 04.04.2016 aktualisiert um 11:13:01 Uhr
Goto Top
Naja ein einfaches GROUP BY in der SQL Query löst dein Problem in Windeseile:
SELECT COUNT(AGruppeID) as Anzahl,AGruppeID FROM Fahrzeuge GROUP BY AGruppeID;
liefert dir immer für alle vorhandenen Gruppen die Anzahl der Fahrzeuge, und du musst nicht im Code rumpfuschen.
http://www.w3schools.com/sql/sql_groupby.asp

Gruß jodel32
Mitglied: Kyrinja
Kyrinja 04.04.2016 um 12:08:12 Uhr
Goto Top
Danke dir aber irgendwie stehe ich gerade voll auf dem Schlauch. Geb mir mal bitte einen Denkanstoß wo ich damit hin soll...
Mitglied: 114757
114757 04.04.2016 aktualisiert um 12:11:32 Uhr
Goto Top
Nun obige SQL Query gibt die eine Tabelle aus die so aussieht:
(Also zu jeder GruppenID die jeweilige Anzahl an Fahrzeugen
AnzahlAGruppeID
5 1
22 2
7 3
2 4
9 5
11 6

Darüber iterierst du einfach mit einer Foreach oder simplen for-Schleife wie oben, fertig ist der Lack.

Das sollte eigentlich als Info reichen! Wohin du das schreiben willst bleibt dir überlassen.
Mitglied: ukulele-7
ukulele-7 04.04.2016 aktualisiert um 15:08:52 Uhr
Goto Top
Auch wenn ich von PHP keine Ahnung habe stimme ich jodel32 voll zu.

Aus Sicht der Datenbank ist deine Idee ziemlich, nennen wir es, bizarr bis wirr. Du hast relational betrachtet eine Tabelle mit Entitätstyp Fahrzeug und irgendeine Art der Klassifizierung (in deinem Fall wohl die AGruppeID). Wenn du jetzt nur Fahrzeuge der AGruppeID = 1 sehen willst fragst du die Datenbank mit einem WHERE AGruppe = 1 und erhälst, was du suchst. Wenn du nur wissen willst wie viele Fahrzeuge die Gruppen haben verwendest du GROUP BY und nicht SELECT * auf alle Datensätze. Du fragst die DB nach dem was du brauchst und wurstest da nicht erst alle Daten durch und das auch noch in einer Schleife.
Mitglied: Kyrinja
Kyrinja 04.04.2016 um 15:27:55 Uhr
Goto Top
Mir geht es darum für jede Gruppe eine eigene Tabelle nebeneinander anzuzeigen. Bin jedoch nicht soweit um diese nach und nach erzeugen zu können sondern habe mir hier halt jeweils mit der einzelnen Abfrage der Gruppe geholfen und dementsprechend dann einen neuen Print rausgehauen.

Wenn ich nun eine neue Gruppe erstelle muss ich in meiner Variante aber wieder einen komplett neues Verarbeitungspaket für diese Gruppe erstellen.
Mitglied: 114757
114757 04.04.2016 aktualisiert um 18:10:09 Uhr
Goto Top
Du brauchst nur meine Query nehmen und drüber mit einer Schleife itterieren, da rein packst du dann dein Ausgabekonstrukt für jeweils eine Gruppe. Also werden so viele Ausgaben erstellt wie es Gruppen gibt, wo ist also das Problem ??? Wahrscheinlich mal wieder deinen Code nur kopiert und nicht kappiert.
Mitglied: Kyrinja
Kyrinja 05.04.2016 um 09:07:14 Uhr
Goto Top
Ja ich habe mir meinen Code zusammen "gebastelt" weil ich es nicht besser weiß... Leider haben wir als Feuerwehr nicht das Geld professionelle zu beschäftigen daher habe ich mich da durch geforstet...
Mitglied: Larmina
Larmina 11.04.2016 um 12:00:59 Uhr
Goto Top
HalliHallo,
wenn ich dich (und dein Codebeispiel) richtig verstanden habe möchtest du für jede neue Gruppe gern eine neue Tabelle drunter haben.
Das macht der Code unten, du kannst ihn dir ja mal anschauen.
Falls du Fragen dazu hast meld dich.

<?php
//$result = mysql_query("SELECT COUNT(AGruppeID) as Anzahl,AGruppeID FROM Fahrzeuge GROUP BY AGruppeID;");  //Bitte mysqli nutzen  
$result = mysqli_query($link, "SELECT AGruppeID, FahrzeugID FROM Fahrzeuge GROUP BY AGruppeID;");    
?>
<table id="wrapper">  
 <?php
while(mysql_fetch_row($result))
{
	$fahrzeugid = $result[1];
	if($temp_agrpID != $result/*Hier steht die AGruppeID drin*/)
	{
		//Wenn neue AGruppeID auftaucht wird eine neue tabelle erstellt
?>
	<tr>
	<td>
	<table id="fahrzeuge"> // Bitte beachten ID darf nur einmal auftauchen, also dynamisch machen oder keine ID verwenden sondern class  
    <tr>
    	<th> die ganzen THs</th>
    </tr>
    <?php
	}
	
		$result2 = mysql_query("SELECT Status, Time, usw FROM log WHERE FahrzeugID = '$fahrzeugid' ORDER BY `ID` DESC");  // auch hier wieder bitte mysqli nutzen, mysql ist deprecated  
		while(mysql_fetch_row($result2))
		{
			?>
            <tr>
            <td>Hier die Daten analog den THs    </td>
            </tr>
            
        <?php
			
		}

	if($temp_agrpID != $result/*Hier steht die AGruppeID drin*/)
	{
		//Wenn neue AGruppeID auftaucht wird eine neue tabelle erstellt
?>
	</table>
    <?php
	}
	$temp_agrpID = $result; // Setzt die temp neu, damit überprüft werden kann ob eine neue AgruppeID aufkommt
}
?>

</td>
</tr>
</table>

LG Larmina