• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Abfragen und in Array zuordnen

escape

New member
Hi Community,

ich habe eine Spielkarte mit 20x25 = 500 Feldern.
Da ich in Verbindung mit Smarty progge habe kommen nun einige Probleme auf mich zu die ich nicht berücksichtigt habe.

Ich lese die ersten 25 Felder einer Reihe aus und speicher diese in einem Array das schaut so aus.

SQL select
Code:
		$sql= "
			SELECT 
				*
			FROM 
				dwars
			WHERE
				omni1 = 67
			AND
				omni3 = 1
			LIMIT 25
			";
			$line1 = array();
			$result = $db->query($sql); 
			while($row = mysql_fetch_assoc($result))
			{
			$line1[] = $row;
			}
			$my = mysql_query($sql);

#echo "<pre>";
#print_r($line1);

Tpl Ausgabe
PHP:
<tr>
	{foreach from=$line1 item=line1 name=line1}
		<td>
			{if $line1.ok >'1'}
				<img id="m" src="{$I}">
			{else}
				<div id="balloon1{$smarty.foreach.line1.index}" class="balloonstyle">{$line1.username}</div>
				<a href="commander.php?c={$line1.omni0}" rel="balloon1{$smarty.foreach.line1.index}">
				<img id="m" src="{$A}"></a>
			{/if}
		</td>
	{/foreach}
</tr>

Mit diesem Code frage ich das Spielfeld ab und prüfe ob die Spieler noch aktiv oder inaktiv sind inaktive Spieler werden als schwarzes Feld und aktive als blaues Feld dargestellt. Nun möchte ich aber gern eine art Freund/Feindliste anlegen. Das bedeutet ich habe die Möglichkeit einen Spieler anzuklicken und kann nun wählen in welchem Verhältnis ich zu Ihm stehe. Freund/Feind/Politik etc. Wenn ich nun Spieler X zu meinem Freund mache, soll dieser als grünes Feld angezeigt werden.

Ich habe nun seit gestern Mittag versucht das zu realisieren aber ich finde keinen logischen Aufbau wie ich das realisieren kann.

Hat jemand von euch vielleicht eine Idee wie ich das umsetzten kann ?
Meine Versuche werde ich hier lieber nicht posten, da Ihr euch sonst köstlich amüsieren würdet.

Bin für Ideen und Anregungen sehr sehr dankbar.
Gruß Thomas
 
theoretisch hast du hier ne n:m Beziehung, also n Spieler haben m Freunde...das lässt sich nur über eine neue Tabelle abbilden

ich würde dir ne Tabelle empfehlen, in der du Beziehungen speicherst, z.B.

ID Spieler1 Spieler2 Beziehung

Spieler 1 und Spieler 2 sine Fremdschlüssel, die jeweils die PlayerID sind, in deinem Spiel schaust du dann immer in dieser Tabelle, ob ein passender Eintrag vorhanden ist -> machst du die Farbe
 
Ich wüsste nicht, wie ich mit meinem Verfahren wie ich die DB auslese, realisieren soll. So habe ich das mal verushct allerdings ist mein Array leer..

In Tabelle "dwars" liegen alle Spieler so gelistet. Es gibt insgesammt 50.000 Einträge in der Tabelle "dwars"
#omni0 <--einmalig für jeden Spieler #user_id ... <- einmalig für jeden Spieler
PHP:
(1, '0:1:1', '1', '1', '1', 'Icecold', 'Monheim', '-', 'Warrant-Officer', '1'),
(2, '0:1:2', '0', '1', '2', 'a', 'a', 'a', 'a', '9'),
(3, '0:1:3', '0', '1', '3', 'a', 'a', 'a', 'a', '9'),
(4, '0:1:4', '0', '1', '4', 'a', 'a', 'a', 'a', '9'),
(5, '0:1:5', '0', '1', '5', 'a', 'a', 'a', 'a', '9'),

In der Tabelle "user_data" liegen Beziehungen. Das schaut so aus.
#id #user_id #friend_id #enemy_id
PHP:
(2, '33849', '33869', '0');


Ich habe den Select so geschrieben,...
PHP:
 $sql="
				SELECT 
					*
				FROM 
					dwars
				INNER JOIN 
					user_data USING(user_id)
				WHERE 
					user_id = '".$_SESSION['user_id']."'
				AND
					omni1 = 67 <-Quadrant
				AND
					omni3 = 1 <- y koordinate
				LIMIT 25
			";
			
		$change = array();
		$result = $db->query($sql); 
		while($row = mysql_fetch_assoc($result))
		{
		$change[] = $row;
		}
		$my = mysql_query($sql);

echo "<pre>";
#echo "friend";
print_r($change);

Resultat nichts als Ausgabe. Aber davon ab ist mein Grundgedanke sicher immernoch falsch?

Ich muss aus Tabelle "dwars" 20 User selecten und ins Array bringen.
Das klappt wunderbar!
dann:
Muss ich aus der Tabelle "user_data" alle Einträge selecten die in meiner Friend/Enemyliste stehen und sich auf dem Quadranten des Spielfelds befinden.

Das müsste so lauten:
PHP:
$sql= "
			SELECT 
				friend_id
			FROM 
				user_data
			WHERE
				omni1 = 67
			AND
				omni3 = 1
			LIMIT 25
			";
			$line1 = array();
			$result = $db->query($sql); 
			while($row = mysql_fetch_assoc($result))
			{
			$line1[] = $row;
			}
			$my = mysql_query($sql);

Ich bin ehrlich irgendwie ist das ne Logiksache und ich kapiere es nicht.
Es muss doch möglich sein mit einem Select 2 tabellen zu verknüpfen und den jeweiligen user aus dem Array zuzuordnen.

Ich schreibe zuviel, weil ich es selbst nimmer kapiere.

Gruß Thomas
 
Zuletzt bearbeitet:
User_data solltest du so aufbauen wie dir Bieber das auch schon empfohlen hat. So weißt du nie über welche Spalte du joinen mußt bzw ob das nun Freund oder Feind ist.
Deine Namen sprechen nicht wirklich für sich (was ist omni0??)

Table relation mit Spalten user_id1, user_id2, relationtype (= Feind/Freund/...)

Code:
SELECT 
                    *
                FROM 
                     relation
                JOIN 
                    dwars ON(relation.user_id2 = dwars.user_id)
                WHERE 
                    relation.user_id1 = '".$_SESSION['user_id']."'
                AND
                    omni1 = 67 <-Quadrant
                AND
                    omni3 = 1 <- y koordinate
                LIMIT 25
 
So habe ich es geschrieben soweit habe ich das auch verstanden udn genauso habe ich die DB nun auch erstellt.

Allerdings liest er nur den einen User aus der DB aus der mein Freund ist.
Er muss alle User einer Reihe selecten und verknüpfen. Wenn ist kein Eintrag in der relation dann schreibe 0 in ARRAY - Friendlist

Schaut gut aus es sind aber noch 24 User die angezeigt werden wollen auch wenn Sie nicht meine Freunde sind, diese müssen dann bei "relation" im Array 0 stehen oder 1 was auch immer. So das ich mit IF filtern kann. Ach ist doch totaler Mist ich verzweifel daran. Das funkt zwar mit der Buddy Ausgabe aber das hilft mir irgendwie nicht weiter.

Code:
Array
(
    [0] => Array
        (
            [user_id] => 33849
            [omni0] => 67:18:9
            [omni1] => 67
            [omni2] => 18
            [omni3] => 9
            [username] => Rammeltron
            [basename] => Rammelhausen
            [clan] => Excalibur
            [rank] => Pilot
            [ok] => 1
#----------------------------hier beginnt die relation tab
            [id] => 1
            [spieler1] => 33849
            [spieler2] => 33869
            [beziehung] => friend
        )

)

Gruß Thomas
 
Zuletzt bearbeitet:
Sorry für Doppelposting.

Kurz gesagt ich benötige Hilfe für einen ordentlichen Select ich haue mir hier die Nächte um die Ohren um komme um meinem Schlaf. Wer würde sich diesen Select mal ansehen "auf dem Server" und eventuell mein problem lösen?

PN erwünscht, es soll auch nicht umsonst sein!
 
Zurück
Oben