如何使用sql将表连接到多个列,然后使用php访问数据?

时间:2018-10-19 18:11:11

标签: php sql

因此,我有一个表“ 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; ?>

1 个答案:

答案 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, ...

这有两个好处,加快查询速度,并以一种简单的方法来识别数据的来源来返回数据。