数据输入后创建的自定义字段

时间:2016-08-02 06:13:51

标签: php mysql join pdo

我在数据已添加到数据库后创建自定义字段时遇到问题。我一直在看这个,我的大脑已经关闭了。我会尝试尽力解释。

我有2个表,custom_fields和custom_fields_values。我还通过表格列对这些字段进行排序。当我从数据库中提取它时,我必须加入表格,以使结果显示的顺序与字段相同。如果我不这样做,那么数据会混淆。

$customfield = $pdo->prepare("SELECT * FROM custom_fields ORDER BY fieldorder ASC");
$customfield->execute();
$customfield = $customfield->fetchAll(PDO::FETCH_ASSOC);

$customfieldvals = $pdo->prepare("SELECT vals.* FROM custom_fields_values vals JOIN custom_fields fields ON fields.id = vals.fieldid WHERE vals.related_system=:relsystem ORDER BY fields.fieldorder ASC");
$customfieldvals->bindParam(':relsystem', $get_system['id'], PDO::PARAM_STR);
$customfieldvals->execute();
$customfieldvals = $customfieldvals->fetchAll(PDO::FETCH_ASSOC);

然后我有一个foreach循环,可以正确显示数据。问题是,当我添加一个没有值的新自定义字段,因为它是在custom_fields表中创建的,而不是在custom_fields_values表中,因此它在ON fields.id = vals.fieldid处不匹配。如果我在没有值的情况下求助字段,则需要另一个字段的值。从本质上讲,因为它在id级别的字段和fieldid值不匹配,所以一切都搞砸了。

如果它没有创建一个值行,我该怎么做呢?无论是什么而不是取另一个字段的值,它都会显示NULL

修改

我是否以正确的方式进行此操作,或者是否有更好的方法让自定义字段值遵循自定义字段而不是JOIN方法?

2 个答案:

答案 0 :(得分:1)

您必须在查询中使用Left Join。 Left Join将返回null如果未在custom_fields_values表中找到自定义字段的值。

所以Query看起来像这样。

$customfieldvals = $pdo->prepare("SELECT vals.* FROM custom_fields_values vals LEFT JOIN custom_fields fields ON fields.id = vals.fieldid WHERE vals.related_system=:relsystem ORDER BY fields.fieldorder ASC");

答案 1 :(得分:0)

我最初没有考虑过这个问题,但是我没有单独调查单独的查询值,而是完全删除了$customfieldvals查询并更改了$customfield查询。而是将值锁定到字段而不是仅链接它们。

$customfield = $pdo->prepare("SELECT * FROM custom_fields fields LEFT JOIN custom_fields_values vals ON fields.id = vals.fieldid WHERE vals.related_system=:relsystem ORDER BY fieldorder ASC");
$customfields->bindParam(':relsystem', $_GET['id'], PDO::PARAM_STR);
$customfield->execute();
$customfield = $customfield->fetchAll(PDO::FETCH_ASSOC);

然后我的foreach

foreach ($customfield as $fields) {...

这让我可以打电话了

$fields['value']

而不是

$customfieldvals[$key]['value']