WebWork Magazin - Webseiten erstellen lassen, Online Medien, html

Webhoster, Webhosting Provider und Domain registrieren

Home | Registrieren | Einloggen | Suchen | Aktuelles | GSL-Webservice | Suleitec Webhosting
Reparatur-Forum | Elektro forum | Ersatzteilshop Haushalt und Elektronik


Homepage und Webhosting-Forum

Scripte und Programme für PHP, MYSQL. Diskussionen zur Programmierung im Web. Fragen zu CMS, Blogsoftware, Shops, Newsletter und vielen weiteren Scripten.


Forum » PHP & MySQL » MySQL Abfrage in while()-Schleifen doppelt verwenden » Antworten
Benutzername:
Passwort: Passwort vergessen?
Inhalt der Nachricht: Fett | Kursiv | Unterstrichen | Link | Bild | Smiley | Zitat | Zentriert | Quellcode| Kleiner Text
Optionen: Emailbenachrichtigung bei Antworten
 

Die letzten 5 Postings in diesem Thema » Alle anzeigen
von foRe
Ich glaub ich hab die Lösung gefunden...



1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
28: 
29: 
30: 
31: 
32: 
33: 
34: 
35: 
36: 
37: 
38: 
39: 
40: 
41: 
42: 
43: 
44: 
45: 
46: 
47: 
48: 
49:
echo '
	<table border="1">
		<tr>
			<td>Planet / Gebäude</td>
		
	';

$gebaeude_id			= 	array();
$plani_gebaeude_id		=	array();
$arbeiter 				= 	array();
$energie 				= 	array();
$rohstoffe 				= 	array();
$forschung 				=	array();
$plani_gebaeude_anzahl	=	array();

while($building_info = mysql_fetch_array($glob_buildings))
	{
	 	$gebaeude_id[] = $building_info['gebaeude_id'];
	 	$plani_gebaeude_id[] = "gebaeude_id_".$building_info['gebaeude_id'];
	 	$arbeiter[] = $building_info['arbeiter'];
	 	$energie[] = $building_info['energie'];
	 	$rohstoffe[] = $building_info['rohstoffe'];
	 	$forschung[] = $building_info['forschung'];
		echo '<td><img src="../graphics/trans250x1.gif"><br>'.$building_info['gebaeude_name'].' ('.$building_info['gebaeude_id'].')</td>';
	}

$anzahl = count($gebaeude_id);

while($plani_info = mysql_fetch_array($glob_planis))
	{
	 	echo '<tr height="500"><td>'.$plani_info['id'].'</td>';
				
				for($i=0;$i<$anzahl;$i++){
					$plani_gebaeude_anzahl[] = $plani_info[$plani_gebaeude_id[$i]];
				}
				
				for($i=0;$i<$anzahl;$i++){
			echo '
				<td>'.$plani_gebaeude_anzahl[$i].'<br>
				x A '.$arbeiter[$i].' = '.$plani_gebaeude_anzahl[$i]*$arbeiter[$i].'<br>
				x E '.$energie[$i].' = '.$plani_gebaeude_anzahl[$i]*$energie[$i].'<br>
				x R '.$rohstoffe[$i].' = '.$plani_gebaeude_anzahl[$i]*$rohstoffe[$i].'<br>
				x F '.$forschung[$i].' = '.$plani_gebaeude_anzahl[$i]*$forschung[$i].'</td>';
		}
		unset($plani_gebaeude_anzahl);
		echo '</tr>';
	}
echo '
	</table>';


Der Trick:
Alle Abfragen in arrays laden.

Danach die Anzahl der vorhandenen Gebäude aus der "gebaeude"-Tabelle zählen lassen und die einzelnen Werte der Arrays nacheinander mithilfe der Array-Positionen (die ja = der Anzahl der Gebäude sind) ausgeben...

Wichtig in diesem Zusammenhang noch das unset($plani_gebaeude_anzahl); damit nicht nur die Anzahl der Gebäude von der ersten Stadt erscheinen, sondern jedesmal mal die der Stadt vom nächsten durchlauf.

Keine Ahnung, ob das vom Quellcode her richtig ist oder nicht - auf jeden Fall scheint es zu funktionieren. Ebenfalls sind in den hier genannten Quellcodes Elemente vorhanden, die lediglich für die Darstellung dienen bzw. können diese noch überflüssige (aus testzweckenstammende) Variablen enthalten sein.

Hoffe mit meiner Lösung jemandem geholfen zu haben, der es ähnlich wenig blickt wie ich...
von foRe
Hallo zusammen,

ich hab mich hier angemeldet, weil ich einfach nicht mehr weiter weiß...

Folgendes Problem (Kurzdarstellung):

Ich habe insgesamt zwei Tabellen:

In der ersten mit dem Namen "gebaeude" sind bestimmte Gebäude aufgelistet mit ihren jeweiligen Eigenschaften wie: id, art, name, kosten, verbrauch, produktion, etc.

Der Aufbau der Tabelle ist wie folgt entstanden:
Es gibt verschiedene Gebäude einer Art wie beispielsweise:
name = "Kohlekraftwerk" und Name = "Atomkraftwerk" für art = "Energie"
name = "Haus" und Name = "Hochhaus" für art = "Wohngebäude"

Für die einzelnen Arten wurden jeweils unterschiedliche id-Bereiche gewählt, sodass "Energie" bspw. von 1 - 19 geht, "Wohngebäude" von 20 - 29, usw.

Es müssen allerdings nicht alle IDs für Energie in diesem Rahmen belegt werden...

Konkret:
"name" besitzt die "ID"
"Kohlekraftwerk" = "1"
"Atomkraftwerk" = "2"
"Haus" = "20"
"Hochhaus" = "21"
etc.

Die zweite Tabelle mit dem Namen "universe" sind einzelne Landstriche mit Städten, wobei jede Stadt wiederum wieder einzelne / mehrere Gebäude enthalten kann.

Der Aufbau ist wie folgt:
id = Id der jeweiligen Stadt (auto-increament)
region = Koordinaten der Stadt
usw.
(für den folgenden Text auch)
gebaeude_id_1 = Anzahl der Gebäude der id mit der Nummer "1" (Kohlekraftwerk) der Tabelle von gebaeuden
gebaeude_id_2 = Anzahl der Gebäude der id mit der Nummer "2" (Atomkraftwerk) der Tabelle von gebaeuden
gebaeude_id_20 = Anzahl der Gebäude der id mit der Nummer "20" (Haus) der Tabelle von gebaeuden
gebaeude_id_21 = Anzahl der Gebäude der id mit der Nummer "21" (Hochhhaus) der Tabelle von gebaeuden



Mein Problem ist nun, festzustellen wieviele Gebäude in jeder Stadt vorhanden sind und die entsprechende Produktion / Verbrauch auszugeben und zu bestimmen...

Mein erster Ansatz war wie folg:



1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
28: 
29:
$glob_buildings = db_query("SELECT * FROM ".$db_prefix."_gebaeude");
$glob_planis = db_query("SELECT * FROM ".$db_prefix."_universe WHERE owner_id != 0");
echo '
	<table border="1">
		<tr>
			<td>Planet / Gebäude</td>
		
	';
while($building_info = mysql_fetch_array($glob_buildings))
	{
		echo '<td>'.$building_info['gebaeude_name'].' ('.$building_info['gebaeude_id'].')</td>';
	}

while($plani_info = mysql_fetch_array($glob_planis))
	{
	 
		echo '<tr><td>'.$plani_info['id'].'</td>';

			while($building_info_2 = mysql_fetch_array($glob_buildings))
				{
				 	$building_info_2_id = $building_info_2['gebaeude_id'];
					echo '<td>'.$plani_info['gebaeude_id_'.$building_info_2_id].'</td>';
				}
				echo '</tr>';
	}
echo '
	</table>';


Das funktioniert allerdings nicht...

Gebe ich zu Beginn bei den ersten beiden Querys noch die Dritte Zeile
1:
$glob_buildings_2 = db_query("SELECT * FROM ".$db_prefix."_gebaeude");

ein und ändere die dritte while-Schleife in
1:
while($building_info_2 = mysql_fetch_array($glob_buildings_2))

dann funktioniert die Ausgabe lediglich für die erste Stadt...

Der Grundgedanke war eigentlich:

1. Alle vorhandenen Gebäude-IDs aus "gebaeude" zu holen (gebaeude.id).
2. Alle Städte, die noch nicht besetzt sind auszuwähen (WHERE owner_id != '0').
3. Die einzelne Anzahl der vorhandenen Gebäude eines jeden Typs (gebaeude_id_???) für jede Stadt zu bestimmen (SELECT gebaeude_id_1, gebaeude_id_2, gebaeude_id_3,...) und diese dann
4. mit den Eigenschaften (Prduktion/Verbrauch) der jeweiligen Gebäude aus (SELECT * FROM gebaeude) zu multiplizieren, aber ich komme irgendwie nicht weiter...

Keine Ahnung, ob es mit while-Schleifen, arrays() mit for- bzw. foreach oder gar mit irgendwelchen JOINS funktionieren kann...

Als zusätzliche Info:
Datensätze der Tabelle gebaeude sind ca. 50
Datenstäze der Tabelle universe sind ca. 4.000
(daher wollte ich zwischen die while-Schleifen eigentlich nicht jedesmal noch eine zusätzliche db_query() einbauen...)

Wäre kuhl, wenn einer ne Lösung oder nen Lösungsweg wüsste.

Nach oben