2016-12-17 3 views
0

Ich verwende Caldera-Formulare in meiner WordPress-Website, um Daten für neue Aufnahmen für unseren Club zu sammeln. Formular funktioniert wie erwartet. Ich versuche, eine Liste offener Anwendungen und eine Seite anzuzeigen, um sie anzuzeigen. Im Folgenden finden Sie meine SQL-Tabelle für Einträge (cf_form_entries).Zeige Zeilen basierend auf SQL-Ergebnissen

+----+-----------------+--------+ 
| ID | Form ID   | Status | 
+----+-----------------+--------+ 
| 1 | CF5852c23e56b1d | active | 
+----+-----------------+--------+ 
| 2 | CF5852c23e56b1d | active | 
+----+-----------------+--------+ 
| 3 | CF5852c23e56b1d | active | 
+----+-----------------+--------+ 

folgende Tabelle enthält alle Informationen, die von der Form vorgelegt (cf_form_entry_values);

+----+----------+---------------+--------------------+ 
| id | entry_id |  slug  |  value  | 
+----+----------+---------------+--------------------+ 
| 1 |  1 | branch  | Branch A   | 
| 2 |  1 | full_name  | asdasd asdasd  | 
| 3 |  1 | email_address | [email protected] | 
| 4 |  1 | phone   | 111111111   | 
| 5 |  2 | branch  | Branch A   | 
| 6 |  2 | full_name  | Full Name   | 
| 7 |  2 | email_address | [email protected] | 
| 8 |  2 | phone   | 111111111   | 
| 9 |  3 | branch  | Branch A   | 
| 10 |  3 | full_name  | Namwe    | 
| 11 |  3 | email_address | [email protected] | 
| 12 |  3 | phone   | 111111111   | 
+----+----------+---------------+--------------------+ 

kann ich eine einfache select Abfrage ausführen und die offene Anwendungs ​​Details eines bestimmten Zweig inneren Verbindungs ​​Tabellen erhalten.

SELECT cf_form_entries.id, 
     cf_form_entries.form_id, 
     cf_form_entries.status, 
     cf_form_entry_values.slug, 
     cf_form_entry_values.value 
FROM cf_form_entry_values 
    INNER JOIN cf_form_entries 
    ON cf_form_entry_values.entry_id = cf_form_entries.id 
WHERE cf_form_entry_values.slug = 'branch' 
    AND cf_form_entry_values.value LIKE '%Branch A%' 

Die obige Abfrage ergibt die folgende Tabelle;

+----+-----------------+--------+--------+----------+ 
| id |  form_id  | status | slug | value | 
+----+-----------------+--------+--------+----------+ 
| 1 | CF5852c23e56b1d | active | branch | Branch A | 
| 3 | CF5852c23e56b1d | active | branch | Branch A | 
+----+-----------------+--------+--------+----------+ 

Meine Frage ist, Wie kann ich (Echo), die weiteren Einzelheiten wie den Namen, E-Mail-Adresse usw. der ausgewählten Tabellen angezeigt werden?

Als solches soll mein Endergebnis alle Details der offenen Anwendungen in einer Tabelle anzeigen. (nicht nur der Name der Filiale)

Ich habe eine Weile versucht. Aber ich kann nur die Verzweigungsnamen wiederholen, da sie die einzigen Daten sind, die in meiner inneren verbundenen Tabelle ausgewählt sind.

+0

Diese Datensätze Name, E-Mail-Adresse usw. sind in welcher Tabelle? –

+0

@AmitKumarSahu, Wie ich schon sagte, sie sind in der 'cf_form_entry_values' – Sid

Antwort

2

Eine Methode ist, bedingte Aggregation:

SELECT fe.id, fe.form_id, fe.status, 
     MAX(CASE WHEN fev.slug = 'branch' THEN fev.value END) as branch, 
     MAX(CASE WHEN fev.slug = 'full_name' THEN fev.value END) as full_name, 
     . . . 
FROM cf_form_entries fe INNER JOIN 
    cf_form_entry_values fev 
    ON fev.entry_id = fe.id 
GROUP BY fe.id, fe.form_id, fe.status; 

Das Schöne an diesem Ansatz ist, dass das Hinzufügen eines neuen Werts nur das Hinzufügen eines neuen Ausdrucks in SELECT erfordert.

+0

Scheint gut. Wie kann ich 'WHERE' hinzufügen, so dass ich Ergebnisse aufgrund einer Verzweigung auswählen kann? – Sid

+0

Ich habe versucht, wo und endete mit einem leeren Ergebnis. Betrachtet man 'HAVING' stattdessen – Sid

+0

@Sid. . . 'HAVING-Zweig = ??'. –

1

Versuchen Sie folgende Abfrage, indem Sie LEFT JOIN ON Two Tables verwenden.

SELECT cfev.*,cfm.Form ID as entry_id 
    FROM cf_form_entry_values cfev 
     LEFT JOIN cf_form_entries cfm ON cfm.id = cfev.entry_id 
      WHERE cfev .slug = 'branch' AND vfm.value LIKE '%Branch A%' 

Dies könnte hilfreich sein. Und Sie Proper Ausgabe erhalten ...

1

Dies sollten Sie die ersten beiden Werte geben, und Sie können das gleiche Muster für den Rest verwenden:

SELECT entries.id, 
     entries.form_id, 
     entries.status, 
     (SELECT value FROM cf_form_entry_values as v 
     WHERE slug='branch' and entry_id=entries.entry_id) as branch, 
     (SELECT value FROM cf_form_entry_values as v 
     WHERE slug='full_name' and entry_id=entries.entry_id) as full_name 
FROM cf_form_entry_values 
INNER JOIN (
    SELECT * FROM cf_form_entry_values 
    INNER JOIN cf_form_entries 
    ON cf_form_entry_values.entry_id = cf_form_entries.id 
    WHERE cf_form_entry_values.slug = 'branch' 
    AND cf_form_entry_values.value LIKE '%Branch A%' 
) as entries 
    ON cf_form_entry_values.entry_id = entries.id 
GROUP BY cf_form_entries.id 
Verwandte Themen