ehm, è una questione di Query più che di PHP (a meno che non usi MYSQL_NUM come secondo parametro)
Se usi nomi uguali nelle due tabelle allora devi trattare i nomi dei campi con AS o indicando la tabella prima:
Metti di avere
codice:
CREATE TABLE persona(
nome VARCHAR(50),
cognome VARCHAR(50)
luogo VARCHAR(50)
);
CREATE TABLE luogo(
nome VARCHAR(50),
stato VARCHAR(50)
);
Idealmente una persona si trova in un luogo, quindi il campo luogo e un FK su nome della tabella luogo
Se fai
codice:
SELECT nome, cognome, luogo, nome, stato FROM persona INNER JOIN luogo on persona.luogo = luogo.nome;
Otterrai un bell'errore, dato che Msql non sa come interpretare i nomi che si ripetono. Usando * non hai questo problema perché MySQL si occupa di tenere traccia delle tabelle nei recordset, tuttavia quando estrai i dati in un array associativo parte tutto.
La cosa migliore sarebbe specificare le tabelle ai campi e/o usare AS per riscriverli:
codice:
SELECT p1.nome AS nomepersona, p1.cognome AS cognomepersona, p1.luogo AS luogopersona, l1.nome AS nomeluogo, l1.stato AS statoluogo FROM persona AS p1 INNER JOIN luogo AS l1 on p1.luogo = l1.nome;
A questo punto nel tuo array da mysql_fetch_array(), otterrai:
array(
[nomepersona] => 'Pippo',
[cognomepersona] => 'De Pippis',
[luogopersona] => 'Topolinia',
[nomeluogo] => 'Topolinia',
[statoluogo] => 'USA'
);
Spero di averti dato un'idea. L'alternativa è, come dicevo, usare il fetch con MYSQL_NUM, dove l'array non viene mappato con nomi, ma solo con numeri, la difficoltà sta nel fatto che devi controllare l'ordine in cui escono i dati.