Beste mensen,

Korte vraag:

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..
INNER JOIN inventory ON inventory.itemdb_id = item_db.id
Dankje :)

Dit is het resultaat met code:

Unknown column 'item_db.id' in 'on clause'


<?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
			player_inventories ON player_inventories.itemdb_id = item_db.id
	') or die(mysql_error());
	
	while($row = mysql_fetch_array($result)) {
		echo '<tr><td>Item name: '.$row['name'].'</td><td></td></tr>';
		echo '<tr><td>Basevalue: '.$row['basevalue'].'</td><td></td></tr>';
		echo '<tr><td><br/></td><td></td></tr>';
	}
?>



En de volgende test (met de aliasen) geeft:

Not unique table/alias: 'a'


<?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
			a ON a.itemdb_id = b.id
	') or die(mysql_error());
	
	while($row = mysql_fetch_array($result)) {
		echo '<tr><td>Item name: '.$row['name'].'</td><td></td></tr>';
		echo '<tr><td>Basevalue: '.$row['basevalue'].'</td><td></td></tr>';
		echo '<tr><td><br/></td><td></td></tr>';
	}
?>
Gaat niet. Gewoon weer de player_inventories JOINen, misschien met een extra alias zelfs. Overigens gebruik geen or die(), dat is nogal een lelijke manier om fouten weer te geven. Controleer of je query is gelukt, zo ja, doe wat je moet doen. Zo nee, echo mysql_error(). Da's véle malen mooier ;-).
De OR DIE was even tijdelijk :). Aangezien de query eerst in een test file staat.

Wat bedoel je precies met weer JOINEN? Ik ben niet zo gewend met multiple tables query-en. Kun je een voorbeeldje geven?

Alvast heel erg bedankt :)
Iemand enig idee? Is er ook niet een optie om dit zonder JOIN te te doen? Het zijn feitelijk gewoon selects..
Ja, maar die wil je toch aan elkaar koppelen?


SELECT
    a.id,
    b.id,
    c.id
FROM
    tabela AS a
INNER JOIN
    tabelb AS b
ON
    a.id = b.id
INNER JOIN
    tabel c AS c
ON
    b.id = c.id


En zo verder bakken. Zo ingewikkeld is het toch niet? Wat heb je zelf al met je joins geprobeerd en welke resultaten/fouten krijg je terug?

Reageren