ugrás a tartalomhoz

Adat elérése JOIN-olt MySQL lekérdezés után.

s_volenszki · 2008. Május. 14. (Sze), 08.51
Sziasztok!

Ha van egy olyan mysql lekérdezésem, amiben JOIN-nal összekapcsolok két táblát, és szerencsétlenül vannak azonos nevű mezők a táblákban, akkor az azonos mezők adatait ezidáig így adtam át változónak:

...
$tabla_1 = "tabla1";
$tabla_2 = "tabla2";
$query = mysql_query("SELECT * FROM `$tabla_1` JOIN `$tabla_2` ON $tabla_2.id = $tabla_1.id_tabla2");
...
for($i=0;..){
    $azonosmezo_1 = mysql_result($query,$i,$tabla_1.".azonosmezonev");
    $azonosmezo_2 = mysql_result($query,$i,$tabla_2.".azonosmezonev");
}
...
Most viszont egy már kialakított lekérdezésben kellene hasonló atrakciót végrehajtanom, de ott ez a helyzet:

...
$tabla_1 = "tabla1";
$tabla_2 = "tabla2";
$query = mysql_query("SELECT * FROM `$tabla_1` JOIN `$tabla_2` ON $tabla_2.id = $tabla_1.id_tabla2");
...
while($item = mysql_fetch_array($query, MYSQL_ASSOC))
{
    $item_id = $item['id_item'];
}
...
Ilyen esetben hogyan tudom elérni az azonos nevű mezőket? Így próbáltam, de mindíg üres marad a változó:

...
while($item = mysql_fetch_array($query, MYSQL_ASSOC))
{
    $azonosmezo_1 = $item[$tabla_1.'.azonosmezonev'];
    $azonosmezo_2 = $item[$tabla_2.'.azonosmezonev'];
}
...
Bizonyára van elképzelésetek a megoldásról, kérlek osszátok meg velem!

s_volenszki
 
1

Explicit fel kell sorolni a mezőket

zila · 2008. Május. 14. (Sze), 09.59
A megoldás az, hogy kerüld a select * típusú lekérdezéseket, mindig sorold fel az oszlopokat és ami ütközik, azoknak adj egyedi alias-t a lekérdezésben. Így elkerülheted, hogy feleslegesen nagy eredményhalmazaid legyenek, mert olyan oszlopokat is lekérsz amikkel azután nem kezdesz semmit az alkalmazásodban.
Kódoláskor is segít, hogy a query-ben látod az oszlopneveket az editorban, amikkel utána dolgozol és nem kell valami segédprogrammal nézegetni a táblaszerkezetet.
Egyetlen hátránya, hogy sokat kell gépelni :)
2

Alias

s_volenszki · 2008. Május. 14. (Sze), 10.50
Erre nem is gondoltam!

Ez azt jelenti, hogy az azonos mezőneveket így kérdezem le:

$tabla_1 = "tabla1";  
$tabla_2 = "tabla2";  
$query = mysql_query("SELECT $tabla_1.azonosmezo AS azonosmezo_1,$tabla_2.azonosmezo AS azonosmezo_2 FROM...
ps.:
Történetesen minden mezőre szükség van, de általánosságban megfontolom a javaslatodat!
3

its a kind of magic

pixelsys · 2008. Május. 14. (Sze), 14.07
$query  = "SELECT t1.id AS id1, t2.id AS id2, t1.column AS column1, t2.column AS column2 "
        . "FROM table1 t1, table2 t2 "
        . "WHERE t1.id=t2.id";
$result = mysql_query($query);
$items  = array();
$i      = 0;
while(($item = mysql_fetch_array($result, MYSQL_ASSOC) != false) {
  $items[$i]['id1']     = $item['id1'];
  $items[$i]['id2']     = $item['id2'];
  $items[$i]['column1'] = $item['column1'];
  $items[$i]['column2'] = $item['column2'];
  $i++;
}
mysql_free_result($result);


az összes mezőre ajánlom a SELECT t1.* megoldást