MySQL Abfrage erweitern

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
Pionier
Mitglied
Beiträge: 232
Registriert: 29.12.2007 19:55
Wohnort: Niebüll (S-H)
Kontaktdaten:

MySQL Abfrage erweitern

Beitrag von Pionier »

Hallo,

ich bin nun echt am verzweifeln.

Ich habe eine SQL-Abfrage geschrieben und möchte diese nun erweitern.

Hier erst mal die Abfrage:

Code: Alles auswählen

$add=' AND '.$sql_suffix.'spieler.id='.$user_id;

$sql='SELECT 
	'.$sql_suffix.'spieler.id AS spieler_id, 
	'.$sql_suffix.'spieler.name_ingame AS spieler_name, 
	'.$sql_suffix.'spieler.name_forum AS spieler_forum,
	'.$sql_suffix.'alli.tag,
	'.$sql_suffix.'alli.id AS alli_id,
	'.$sql_suffix.'forschung.*
FROM 
	'.$sql_suffix.'spieler
	LEFT JOIN '.$sql_suffix.'alli ON '.$sql_suffix.'spieler.alli = '.$sql_suffix.'alli.id
	LEFT JOIN '.$sql_suffix.'forschung ON '.$sql_suffix.'forschung.spieler_id='.$sql_suffix.'spieler.id
WHERE 
	'.$sql_suffix.'spieler.name_ingame<>"sonstige" '.$add.'; ';
//echo '<pre>'.$sql.'</pre>';
$query=@mysql_query($sql);
$rows=@mysql_fetch_assoc($query);
$zahl=@mysql_num_rows($query);

$spieler['name']		= $rows['spieler_name'];
$spieler['name_forum']	= $rows['spieler_forum'];
$spieler['id']			= $rows['spieler_id'];
$spieler['alli_id']		= $rows['alli_id'];
$spieler['alli_tag']	= $rows['tag'];


if($zahl>0 && isset($rows['id'])){
	do{
		$fleet[$rows['id']]['sp']		= number_format($rows['Spionagetechnik'], 0, ',', '.');
		$fleet[$rows['id']]['co']		= number_format($rows['Computertechnik'], 0, ',', '.');
		$fleet[$rows['id']]['wa']		= number_format($rows['Waffentechnik'], 0, ',', '.');
		$fleet[$rows['id']]['sc']		= number_format($rows['Schildtechnik'], 0, ',', '.');
		$fleet[$rows['id']]['ra']		= number_format($rows['Raumschiffpanzerung'], 0, ',', '.');
		$fleet[$rows['id']]['en']		= number_format($rows['Energietechnik'], 0, ',', '.');
		$fleet[$rows['id']]['ve']		= number_format($rows['Verbrennungstriebwerk'], 0, ',', '.');
		$fleet[$rows['id']]['im']		= number_format($rows['Impulstriebwerk'], 0, ',', '.');
		$fleet[$rows['id']]['la']		= number_format($rows['Lasertechnik'], 0, ',', '.');
		$fleet[$rows['id']]['io']		= number_format($rows['Ionentechnik'], 0, ',', '.');
		$fleet[$rows['id']]['pl']		= number_format($rows['Plasmatechnik'], 0, ',', '.');
		$fleet[$rows['id']]['gr']		= number_format($rows['gravi'], 0, ',', '.');
		$fleet[$rows['id']]['ha']		= number_format($rows['hyperantrieb'], 0, ',', '.');
		$fleet[$rows['id']]['fo']		= number_format($rows['forschungsnetz'], 0, ',', '.');
		$fleet[$rows['id']]['fl']		= number_format($rows['forschungslevel'], 0, ',', '.');
		$fleet[$rows['id']]['ht']		= number_format($rows['hyperraumtechnik'], 0, ',', '.');
		$fleet[$rows['id']]['ex']		= number_format($rows['expeditionstechnik'], 0, ',', '.');
		$insert			= true;
		$key			= $rows['id'];
		
	}while($rows=@mysql_fetch_assoc($query));
}else{
		$fleet['1']['sp']		= 'k.A.';
		$fleet['1']['co']		= 'k.A.';
		$fleet['1']['wa']		= 'k.A.';
		$fleet['1']['sc']		= 'k.A.';
		$fleet['1']['ra']		= 'k.A.';
		$fleet['1']['en']		= 'k.A.';
		$fleet['1']['ve']		= 'k.A.';
		$fleet['1']['im']		= 'k.A.';
		$fleet['1']['la']		= 'k.A.';
		$fleet['1']['io']		= 'k.A.';
		$fleet['1']['pl']		= 'k.A.';
		$fleet['1']['gr']		= 'k.A.';
		$fleet['1']['ha']		= 'k.A.';
		$fleet['1']['fo']		= 'k.A.';
		$fleet['1']['fl']		= 'k.A.';
		$fleet['1']['ht']		= 'k.A.';
		$fleet['1']['ex']		= 'k.A.';
};
mysql_free_result($query);
Nun soll aber in der Abfrage die Berechnung für „forschungslevel“ erfolgen.

Berechnung (theoretisch):

Forschungslevel = SUM(SELECT forschungslabor
FROM allytool_planeten
ORDER BY DESC
LIMIT (forschungsnetz +1);

Mit Forschungsnetzwerk Stufe 1 werden die beiden grössten Forschungslabore automatisch miteinander verbunden.
Mit Forschungsnetzwerk Stufe 2 kommt das nächstkleinere FL automatisch dazu.

Beispiele:

Spieler 1 hat drei Planeten mit folgenden Forschungslaboren 12 – 11 – 9
Und ein Forschungsnetz von 1
Dann ist das Forschungslevel = 23

Spieler 2 hat drei Planeten mit folgenden Forschungslaboren 12 – 11 – 9
Und ein Forschungsnetz von 2
Dann ist das Forschungslevel = 32

Das gesamte Script habe ich hier nochmals als txt bereitgestellt.
http://www.allytools.de/own_forschung.txt

MFG Pionier
Benutzeravatar
Pionier
Mitglied
Beiträge: 232
Registriert: 29.12.2007 19:55
Wohnort: Niebüll (S-H)
Kontaktdaten:

Beitrag von Pionier »

Schade, 73 Klicks und keiner konnte / wollte helfen :(

Nun ja, was soll’s. Ich habe nun (denke ich) einen Lösungsansatz.
SELECT SUM(forschungslabor) AS gesamt
FROM (SELECT forschungslabor
FROM '.$sql_suffix.'planeten
WHERE '.$sql_suffix.'spieler.name_id='.$user_id.'
ORDER BY forschungslabor DESC LIMIT '.$rows['forschungsnetz'].'
) AS temp;
nur, wie kombiniere ich die Abfragen :-?
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Beitrag von Miriam »

Irgendwie konfus ... zumindest für mich.
Woher kommt denn Dein

Code: Alles auswählen

$rows['forschungsnetz']
?

Das

Code: Alles auswählen

$rows=@mysql_fetch_assoc($query);
liefert das garnicht, soweit ich sehen kann :-)

Und wieso verschachtelst Du den Select Query? Und was soll bei einer Limitierung des Selects als Summe raus kommen? Nicht das korrekte / gewünschte Ergebnis jedenfalls. :-P
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Antworten

Zurück zu „Coding & Technik“