Ik zit met een vrij diep systeem qua categorisering. Het probleem is nu dat ik bij het QUERY-en in PHP conflicten krijg met het aanroepen van de specifieke AUTO_INCREMENT -ID- van een van de TABLES die in de QUERY worden aangeroepen.
Neem dit voorbeeld:
$query = mysql_query('SELECT * FROM item_db, item_sorts, item_types, item_bonusses, item_bonus_sort, item_bonus_type, player_inventories WHERE char_id = 1');
WHERE char_id is niet een conflict aangezien deze maar 1 keer voorkomt (namelijk zijn/haar inventory).
Maar als ik nu bijv. een specifieke ID van een table wil hebben, hoe roep ik die dan aan? Ik gebruik liever geen anderen ID referentie in elke tabel dan ID. Eerder gebruikte ik bij elke table bijv. inventory_id, user_id, character_id, maar vind het gewoon te storend met al die andere waarden in alle tables..
Hoe ziet je datamodel eruit? Bovenstaande query (waarbij $query géén query is, maar een resultset) levert een berg data op, maar daar zit geen enkel verband in. Het is dan ook niet meer dan een hoopje ellende, er is geen enkele JOIN te bekennen.
Het een game systeem. Dit gedeelte is voor de ITEMS in de speler's CHARACTER's INVENTORY.
Wat ik wil bereiken met een query:
SELECTEER alle ITEMS van CHARACTER_ID z'n INVENTORY en haal de ORGINELE ITEM_ID uit de ITEM_DB en de bonuses relevant aan die ITEM('s) ook.
Het resultaat: Een lijst met alle ITEMS in de INVENTORY van de USER's CHARACTER
Is dit duidelijk? : ( ...
Ik zou dan zoiets moeten doen als dit:
<?php
$query = mysql_query('SELECT * FROM item_db, item_sorts, item_types, item_bonusplayer_inventories WHERE char_id.player_inventories = 1');
?>
..maar dan met nog meer checks zodat precies de nodige data terug moet komen die bij de items horen in de inventory.
Als mijn item_db table later duizenden items zou bevatten is het neem ik aan niet handig om bij elke SELECT *(ALL) te gebruiken? Is dit heel erg belastend voor de server? Ik bedoel, veel meer belastend dan een specifieke (circa) 10rows table met bijv. 5000 entries?
system_users Hier komen alle users in
system_characters Hier komen de characters van de user (user_id) in
item_db Hier staan alle items in
item_sort Hier staan de soorten items in
item_types Hier staan de types items in (wordt in elke item in item_db vermeld om te linken, als de item_type bekend is haal ik met script de relevante item_sort op)
item_bonus_sorts Hier staan de bonus soorten van item in (bonuses die items kunnen krijgen)
item_bonus_type Hier staan de specifieke bonuses in
Ik weet niet precies hoe ik het datamodel moet overbrengen.
Hopelijk heldert dit iets op..
EDIT_NOTE: Ik gebruik tot nu toe bijna altijd elke row in de tabellen. Is het dan erg om toch wel de SELECT * te gebruiken? Of moet ik persee voor de specifieke selects kiezen bij de tables voor lagere server belasting?
Error:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /Applications/MAMP/htdocs/project/sql_testing.php on line 102
*Line 102 is: while($row = mysql_fetch_array($query)) {
Hoe roep je sowieso al de $row['array_variable'] name aan van een specifieke table? Moet je dan altijd AS gebruiken? Maar goed, in dit geval werkt de fetch niet eens.. :(