因此,我有一个表“ lyket_elements”(具有id,field1,field2,field3)和一个表“ lyket_entries”,其具有source.id和series_id(其中包含lyket_elements之一的ID)。 这是我到目前为止的SQL。
$sql = "SELECT LE.id, ele1.field1, ele2.field1\n"
. " FROM lyket_entries AS LE\n"
. " INNER JOIN lyket_elements AS ele1 \n"
. " ON ele1.id = LE.source_id \n"
. " INNER JOIN lyket_elements AS ele2\n"
. " ON ele2.id = LE.series_id";
然后,我尝试访问lyket_elements表中的field1,field 2或field 3,该表与lyket_entires source_id或series_id中的ID相关联。
<?php echo $all_entries['1']->ele1.field1; ?>
<?php echo $all_entries['1']->ele2.field1; ?>
但是,以上只是给我一个字符串“ field1”和“ field2”,而不是里面的实际数据。当我var_dump($ all_entries)那里没有ele1或ele2时,数据似乎在那里,但都在“ lyket_elements”下
我可以做到
<?php echo $all_entries['1']->lyket_elements; ?>
这给了我1个元素,但是我似乎无法针对与source_id和series_id中包含的不同ID对应的正确元素。
ANSWER:所以上面的查询有效,但是我需要在SELECT子句中的每个元素上添加一个附加的AS,以便能够访问看起来正确的元素。这是我最后的查询。
$sql = "SELECT LE.id, ele1.element_field1 AS ele1field1, ele2.element_field1 AS ele2field1\n"
. " FROM lyket_entries AS LE\n"
. " LEFT JOIN lyket_elements AS ele1 \n"
. " ON ele1.id = LE.source_id \n"
. " LEFT
JOIN lyket_elements AS ele2\n"
. " ON ele2.id = LE.series_id";
然后像这样访问它们
<?php echo $all_entries['1']->ele1field1; ?>
<?php echo $all_entries['1']->ele2field1; ?>
答案 0 :(得分:2)
字段将以您分配的别名作为前缀。例如:
LE.id
ele1.field1
ele2.field2
就像您在ON
语句中所做的一样。您 为同一张表lyket_elements
分配了两个别名,这会使事情变得混乱,但可行。
也许最好的办法是从查询中指定所需的列,例如:
$sql = "SELECT LE.id AS foo, ele1.field1 AS bar, ele2.field2 AS glorp, ...
这有两个好处,加快查询速度,并以一种简单的方法来识别数据的来源来返回数据。