2016-08-02 15 views
2

データが既にDBに追加された後にカスタムフィールドの作成に問題があります。私はこれをしばらく見ていて、私の脳は閉鎖されています。私はできる限りベストを試して説明します。既に入力されたデータの後に作成されたカスタムフィールド

私は2つのテーブル、custom_fieldsとcustom_fields_valuesを持っています。私はまた、テーブルの列を介してこれらのフィールドを並べ替える。私がdbからそれらを引っ張ると、結果をフィールドと同じ順序で表示させるためにテーブルを結合する必要があります。私がしなければ、データが混ざり合ってしまいます。

$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が表示されます。

EDIT

アムは、私はこれについて正しい道を行くか、カスタムフィールドの値は、カスタムフィールドではなくJOIN方法に従ってください持っている良い方法はありますか?

答えて

1

クエリにはLeft Joinを使用する必要があります。 custom_fields_valuesテーブルにカスタムフィールドの値が見つからない場合、Left Joinはnullを返します。

クエリは次のようになります。

$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"); 
+0

LEFT JOINは機能しませんでした。それは同じ結果を持っています。 – CrunchyToast

+0

'Right Join'を試しましたか? –

+1

@CrunchyToastこのクエリを試すこともできます。 'SELECT vals。* FROM custom_fields fields LEFT JOIN custom_fields_values vals ON fields.id = vals.fieldid WHERE vals.related_system =:relsystem ORDER BY fields.fieldorder ASC' –

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:これは私ではなく

$fields['value']

を呼び出すことが許さ

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

$customfieldvals[$key]['value']

関連する問題