Hallo allemaal ,
Ik ben even bezig met een pagina die alle leden uit de Databse tevoorschijn tovert maar het is mogenlijk om per account diverse charracters aan te maken en dan laat hij het zo zien op de pagina :
_________________________________________
ID Username van character - Level
id : 1 - username : Kevichill - Level : 255
id : 1 - username : Kevichill2 - Level : 255
_________________________________________
Alleen wil ik dat hij per account maar 1 charracter laat zien ,
Weet iemand hoe dat moet ?

B.v.d Kevin

Leden.php
<?php

/**
 * @author Kevin Riemers .
 * @copyright 2008 Made for Dark Empire Server WOW BC.   Greetzz Kevichill !
 * Deze pagina laat alle leden zien
 */

    require_once('config.php');
    $sql = "
        SELECT acct, name, level
        FROM characters
        ORDER BY acct ASC, name ASC, level ASC
        ";
    if (!$res = mysql_query ($sql)) {
        echo '<pre>';
        echo htmlentities ($sql);
        trigger_error (mysql_error ());
        echo '</pre>';
    }
    else {
        while ($row = mysql_fetch_assoc ($res)) {
        echo '<br />';
            echo 'ID : <b>' . $row['acct'] . '</b> - ';
            echo 'Username : <b>' . $row['name'] . '</b> - ';
            echo 'Level : <b>' . $row['level'] . '</b>';
        }
    }


?>
Geef je datamodel eens, dan kunnen we meekijken.

Wanneer bovenstaande schets het datamodel is, dan is dit fout. 1 account met meerdere namen, dan heb je automatisch al 2 tabellen nodig.
Uitgaande dat je SQL gebruikt: je zou DISTINCT kunnen gebruiken op je ID-veld. Ik denk dat je datamodel een beetje fout is trouwens, als 1 gebruiker meerdere characters kan hebben, zou ik een tabel gebruiker hebben en een tabel character (die weer linkt naar de gebruiker als 'eigenaar').
DB

CREATE TABLE `accounts` (
  `acct` int(10) unsigned NOT NULL auto_increment COMMENT 'Unique ID',
  `login` varchar(32) collate utf8_unicode_ci NOT NULL COMMENT 'Login username',
  `password` varchar(32) collate utf8_unicode_ci NOT NULL COMMENT 'Login password',
  `gm` varchar(32) collate utf8_unicode_ci NOT NULL default '' COMMENT 'Game permissions',
  `banned` tinyint(3) unsigned NOT NULL default '0' COMMENT 'Account Standing',
  `lastlogin` timestamp NOT NULL default '0000-00-00 00:00:00' COMMENT 'Last login timestamp',
  `lastip` varchar(16) collate utf8_unicode_ci NOT NULL default '' COMMENT 'Last remote address',
  `email` varchar(64) collate utf8_unicode_ci NOT NULL default '' COMMENT 'Contact e-mail address',
  `flags` tinyint(3) unsigned NOT NULL default '0' COMMENT 'Client flags',
  `forceLanguage` varchar(5) collate utf8_unicode_ci NOT NULL default 'enUS',
  `muted` int(30) NOT NULL default '0',
  `VipMember` tinyint(3) default NULL,
  PRIMARY KEY  (`acct`),
  UNIQUE KEY `login` (`login`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Account Information' AUTO_INCREMENT=20 ;

Ik heb deze tabellen niet gemaakt word automatisch door de server gemaakt :-)
Als als de kolom 'acct' het betreffende id bevat, gaat je dit niet lukken met 1 tabel. Dit is namelijk de primary key in die tabel en die moet uniek zijn...

Je hebt dan dus al automatisch een aparte tabel nodig waarin je de verschillende namen aan dit ene id koppelt.
Kevichill schreef op 22.02.2008 16:21
Ik heb deze tabellen niet gemaakt word automatisch door de server gemaakt :-)
Dat is natuurlijk onzin, de server doet echt helemaal niks vanzelf. Iemand heeft dit aangemaakt.

MyISAM... dat is niet eens een database te noemen.

Maar goed, wat is jouw definitie van een account? Hoe wil jij vaststellen dat meerdere accounts bij 1 user horen?
Sorry ik gaf de verkeerde DB tabel . dit is de goeden . de guid is de ID


CREATE TABLE `characters` (
  `guid` int(6) unsigned NOT NULL default '0',
  `acct` int(20) unsigned NOT NULL default '0',
  `name` varchar(21) NOT NULL default '',
  `race` smallint(3) NOT NULL,
  `class` smallint(3) NOT NULL,
  `gender` tinyint(1) NOT NULL,
  `custom_faction` int(30) NOT NULL default '0',
  `level` int(3) NOT NULL,
  `xp` int(30) NOT NULL,
  `exploration_data` longtext NOT NULL,
  `skills` longtext NOT NULL,
  `watched_faction_index` bigint(40) NOT NULL,
  `selected_pvp_title` int(30) NOT NULL,
  `available_pvp_titles` int(30) NOT NULL,
  `gold` int(30) NOT NULL,
  `ammo_id` int(30) NOT NULL,
  `available_prof_points` int(30) NOT NULL,
  `available_talent_points` int(30) NOT NULL,
  `current_hp` int(30) NOT NULL,
  `current_power` int(30) NOT NULL,
  `pvprank` int(30) NOT NULL,
  `bytes` int(30) NOT NULL,
  `bytes2` int(30) NOT NULL,
  `player_flags` int(30) NOT NULL,
  `player_bytes` int(30) NOT NULL,
  `positionX` float NOT NULL default '0',
  `positionY` float NOT NULL default '0',
  `positionZ` float NOT NULL default '0',
  `orientation` float NOT NULL default '0',
  `mapId` int(8) unsigned NOT NULL default '0',
  `zoneId` int(8) unsigned NOT NULL default '0',
  `taximask` longtext NOT NULL,
  `banned` int(40) unsigned NOT NULL default '0',
  `banReason` varchar(255) NOT NULL,
  `timestamp` int(30) default NULL,
  `online` int(11) default NULL,
  `bindpositionX` float NOT NULL default '0',
  `bindpositionY` float NOT NULL default '0',
  `bindpositionZ` float NOT NULL default '0',
  `bindmapId` int(8) unsigned NOT NULL default '0',
  `bindzoneId` int(8) unsigned NOT NULL default '0',
  `isResting` int(3) NOT NULL default '0',
  `restState` int(5) NOT NULL default '0',
  `restTime` int(5) NOT NULL default '0',
  `playedtime` text NOT NULL,
  `deathstate` int(5) NOT NULL default '0',
  `TalentResetTimes` int(5) NOT NULL default '0',
  `first_login` tinyint(1) NOT NULL default '0',
  `forced_rename_pending` tinyint(1) NOT NULL default '0',
  `arenaPoints` int(10) NOT NULL,
  `totalstableslots` int(10) unsigned NOT NULL default '0',
  `instance_id` int(10) NOT NULL,
  `entrypointmap` int(10) NOT NULL,
  `entrypointx` float NOT NULL,
  `entrypointy` float NOT NULL,
  `entrypointz` float NOT NULL,
  `entrypointo` float NOT NULL,
  `entrypointinstance` int(10) NOT NULL,
  `taxi_path` int(10) NOT NULL,
  `taxi_lastnode` int(10) NOT NULL,
  `taxi_mountid` int(10) NOT NULL,
  `transporter` int(10) NOT NULL,
  `transporter_xdiff` float NOT NULL,
  `transporter_ydiff` float NOT NULL,
  `transporter_zdiff` float NOT NULL,
  `spells` longtext NOT NULL,
  `deleted_spells` longtext NOT NULL,
  `reputation` longtext NOT NULL,
  `actions` longtext NOT NULL,
  `auras` longtext NOT NULL,
  `finished_quests` longtext NOT NULL,
  `honorPointsToAdd` int(10) NOT NULL,
  `killsToday` int(10) NOT NULL default '0',
  `killsYesterday` int(10) NOT NULL default '0',
  `killsLifeTime` int(10) NOT NULL default '0',
  `honorToday` int(10) NOT NULL default '0',
  `honorYesterday` int(10) NOT NULL default '0',
  `honorPoints` int(10) NOT NULL default '0',
  `difficulty` int(4) NOT NULL default '0',
  PRIMARY KEY  (`guid`),
  KEY `acct` (`acct`),
  KEY `name` (`name`),
  KEY `b` (`banned`),
  KEY `c` (`online`),
  KEY `d` (`forced_rename_pending`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Holy sh*t :| naja ik ga verder niet in op het datamodel, dat moet je zelf leren (tagword: 'normaliseren'). Een oplossing voor jouw vraag aan het begin is denk ik het gebruik van DISTINCT, iets in de vorm van:

<?php
$accounts = mysql_query("SELECT DISTINCT acct, name, level FROM characters ORDER BY name ASC;");
?>

Reageren