Koordinaten-Datenbank, brauche Hilfe

Acriss

Gesperrt
Hi,
ich spiele ein Browsergame ( http://www.space-pioneers.de )
und habe mir dazu eine Koordinaten-Datenbank gebastelt.
Man kann folgende Daten einfügen:
Allianz, Spielername, Koordinaten(13stück)
Soweit tut alles ganz gut,
auch die Suchfunktion arbeitet prima.

Mein Problem:

Ich nehme mal ein Beispiel:
Folgende Daten werden eingetragen:
Rla <-Allianz
c-mon <_Name
123:66:12 <-Koords1
124:66:04 <-Koords2
178:05:13 <-Koords3

Das geht ja,
aber nun sollen 2 Koordinaten hinzugefügt werden.
Also folgende Eingabe:
Rla
c-mon
144:05:16
101:99:01

Allerdings soll die der erste Eintrag dann geupdated werden,
sodass die Koordinaten an Platz 4 und 5 gelangen.
WIe realisiere ich das?
 
Hallo!
Ich würde den Datensatz auslesen und prüfen wieviele Koordinaten schon gespeichert wurden. Anschließend per Update-Query den Datensatz updaten.
mfg flo
 
Und wie prüfe ich?
Soll ich das so machen?
(0 = id, 1 = alli, 2= spieler)
Code:
while ($row = mysql_fetch_array($query, $connect))
{
if ($row[3] != "")
{
$update = "UPDATE spdata SET koords1 = '$eingabe' WHERE spieler LIKE '$Spieler')
}
}


Weil so klappt das nicht, denn dann werden ja alle restlichen Felder befüllt.
 
So wie ich das sehe ist dein DB-Modell falsch.
Mach 2 Tabellen:
User
-------------------
UserID | UserName | Allianz

MySQL:
SQL:
CREATE TABLE User (
  UserID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  UserName VARCHAR(50) NULL,
  Allianz VARCHAR(50) NULL,
  PRIMARY KEY(UserID),
  UNIQUE INDEX User_U1(UserName, Allianz),
  INDEX User_I1(Allianz, UserName)
);

und
Koordinaten:
KoordinatenID | UserID | Koordinate

MySQL:
SQL:
CREATE TABLE Koordinate (
  KoordinateID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  UserID INTEGER UNSIGNED NOT NULL,
  Koordinate VARCHAR(20) NULL,
  PRIMARY KEY(KoordinateID),
  INDEX Koordinate_F1(UserID)
);


Zum Auslesen würde ich 2 Funktionen machen. Eine getUsers() und eine getKoordinate($UserID).

GetUsers macht ein SELECT auf die Users Tabelle. getKoordinate($UserID) macht ein SELECT auf die Koordinaten Tabelle mit einer WHERE Klausel auf die UserID.

Um einem User dann beliebig viele Koordinaten hinzuzufügen musst du nur in der Koordinatentabelle ein neuer Eintrag machen und die UserID entsprechend Setzen.

----------------------
[Edit]

Hab mal ein Beispiel für dich. Suche und schöne Ausgabe lass ich dich selber bauen ;)

PHP:
<?php
function query($sql)
{
	// Verbinden
	$connection = mysql_connect('localhost', 'user', 'pw') or die('Fehler beim Verbinden');
	mysql_select_db('db', $connection) or die('Fehler beim Wählen der Datenbank');
	
	// Daten holen
	$result = @mysql_query($sql, $connection);
	$count = @mysql_num_rows($result);

	// Daten in array schreiben
	$data = array();
	if($count > 0) 
	{
		for($i=0; $i<$count; $i++)
		{ 
			$data[$i]=mysql_fetch_array($result);
		}
	}
	
	return $data;
}

function getUsers()
{
	// Select auf usertabelle
	return query('SELECT * FROM `User`;');
}

function getKoordinaten($UserID)
{
	// Select auf Koordinatentabelle mit WHERE
	return query('SELECT * FROM `Koordinate` WHERE `UserID` = "'.$UserID.'";');
}

// Ausgabe:
$Users = getUsers();
foreach($Users as $User)
{
	// Koordinaten des Users holen
	$Koordinaten = getKoordinaten($User['UserID']);
	
	// Userdaten ausgeben:
	echo 'Username: ' . $User['Username'] . '<br />';
	echo 'Allianz: ' . $User['Allianz'] . '<br />';
	// Koordinaten ausgeben
	echo 'Koordinaten:<br />';
	foreach($Koordinaten as $Koordinate)
	{
		echo $Koordinate['Koordinate'] . '<br />';
	}
}
?>
 
Zuletzt bearbeitet von einem Moderator:
Zurück