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..
Zet de échte foutmelding eens op het scherm, daar word je vele malen wijzer van.
De query is mislukt, er is dus geen resultset, en er valt dus niks te fetchen. Zonder foutafhandeling krijg je dan een melding die eigenlijk nergens op slaat, zie
mysql_fetch_array(): supplied argument is not a valid MySQL result resource ...
En nogmaals, $query is bij jou geen query maar een resultset. $result is dus een betere naam, het zegt precies wat deze variabele is: een resultset.
<?php
$result = mysql_query('
SELECT
idb.name,
idb.description,
idb.image,
idb.basevalue,
idb.weight,
idb.durability,
idb.quantity_max,
idb.hands,
idb.damage_min,
idb.damage_max
pin.item_quantity,
pin.durability_current
FROM
item_db AS idb,
item_sorts AS iso,
item_types AS ity,
player_inventories AS pin,
system_characters AS sch
WHERE
sch.id = pin.char_id AND
idb.id = pin.itemdb_id
') or die(mysql_error());
while($row = mysql_fetch_array($result)) {
echo '<tr><td>Item name: '.$row['name'].'</td><td></td></tr>';
}
?>
Dit is nu de error:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.item_quantity, pin.durability_current FROM item_db AS idb, item_sort' at line 12
Achter de kolomnaam idb.damage_max mist een komma, vandaar dat de foutmelding begint bij het stukje waar hij niet meer aan toe komt, dus bij '.item_quantity, pin.durability_current FROM item_db AS idb, item_sort'.
Het werkt nu, maarde output is nog niet efficient :(.
<?php
// Inventory show
$result = mysql_query('
SELECT
idb.name,
idb.description,
idb.image,
idb.basevalue,
idb.weight,
idb.durability,
idb.quantity_max,
idb.hands,
idb.damage_min,
idb.damage_max,
pin.item_quantity,
pin.item_durability_current
FROM
item_db AS idb,
item_sorts AS iso,
item_types AS ity,
player_inventories AS pin,
system_characters AS sch
WHERE
sch.id = pin.char_id AND
idb.id = pin.itemdb_id
') or die(mysql_error());
while($row = mysql_fetch_array($result)) {
echo '<tr><td>Item name: '.$row['name'].'</td><td></td></tr>';
}
?>
In de item_db staat de zogenaamde CORE-ITEM-DATA. In de inventory staat alleen maar een referentie naar die item_db. Ik heb ook al een item_bonus_db waar dan per drop (uit bijv. een monster) waarden met min's en max's worden ingevuld in een nieuwe dynamische table die dan wordt gekoppeld met de item in de inventory.
Anders gezegd, bij het vinden van een item:
1.) Herken welke item het is (de unieke ID in de item_db wordt herkend)
2.) De item_db ID wordt gekoppeld aan de inventory zodat zichtbaar wordt om welk item het gaat
3.) Ga naar de item_bonuses en zoek naar de ID's die overeenkomen met de item_db bonus_id's
4.) Voer deze in een nieuwe dynamische bonus_db in en koppel deze dan weer aan de item_id in de inventory
(Loot > Item match zoeken > bonuses random toevoegen vanuit de statische table > statische bonuses randomizen > toevoegen aan nieuwe dynamische table > dynamische bonus_id's worden dezelfde value-code als de item in de inventory > voeg de specifieke data toe aan de inventory.
Helaas kan ik niet zo goed brengen. Hopelijk is het wel een beetje duidelijk.
Ik krijg nu 4 outputs in de while loop. Allemaal met de item_name uit de item_db. Maar 4 keer, terwijl deze er 1 keer in staat. Item_sorts heeft 2 entries en item_types ook 2. Komt dat misschien dat de query doorgaat totdat die zijn verwerkt?
Ik kan het wel voor elkaar krijgen met allemaal while loops in elkaar te zetten, maar op basis van de INNER JOIN tutorial krijg ik mijn situatie niet voor elkaar:
<?php
$result = mysql_query('
SELECT
a.item_quantity,
a.item_durability_current,
b.name AS b_name,
b.description,
b.image,
b.basevalue,
b.weight,
b.durability,
b.quantity_max,
b.hands,
b.damage_min,
b.damage_max,
c.name AS c_name,
d.name AS d_name
FROM
player_inventories AS a,
item_db AS b,
item_types AS c,
item_sorts AS d
INNER JOIN
...
');
?>