Data bundelen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tim Groot

Tim Groot

23/12/2022 14:24:19
Quote Anchor link
Goedemiddag,

Ik ben bezig om een beheer site te maken achter een WP site. Nu hebben we een aantal formulieren van GravityForms en die data wil ik gaan gebruiken. Het formulier waar ik nu mee bezig ben geeft je de mogelijkheid om je aan te melden voor een bijeenkomst. Dus je wilt de data per inschrijving uit de database kunnen halen.
Ik ben er achter dat de data hier wordt opgeslagen en ik kan dit filteren op het ID van het formulier:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $conn->query("SELECT * FROM wp_gf_entry_meta WHERE form_id='".$select_id."'"); ?>


Opbouw DB:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
TABLE `wp_gf_entry_meta` (
  `id` bigint(10) UNSIGNED NOT NULL,
  `form_id` mediumint(10) UNSIGNED NOT NULL DEFAULT 0,
  `entry_id` bigint(10) UNSIGNED NOT NULL,
  `meta_key` varchar(255) DEFAULT NULL,
  `meta_value` longtext DEFAULT NULL,
  `item_index` varchar(60) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


Elke inschrijving heeft dan ook nog een eigen ID -> meta_key.
De meta_key wil ik dus gaan bundelen.

META_KEY --- NAAM --- TELEFOONNR ----- LEEFTIJD
1111111 ---- naam1 - telefoonnummer1 - leeftijd1
2222222 ---- naam2 - telefoonnummer2 - leeftijd2

zoiets....iemand tips?

Toevoeging op 23/12/2022 22:28:43:

Ik ben te moeilijk aan het denken. De beste ideeen ploppen op tijden het douchen of onder het genot van een pilsje :-). Nu in onder het genot van een pilsje. Ik zal de oplossing nog posten
Gewijzigd op 23/12/2022 22:32:04 door Tim Groot
 
PHP hulp

PHP hulp

29/03/2024 06:41:31
 
Ad Fundum

Ad Fundum

24/12/2022 12:25:15
Quote Anchor link
Om te beginnen zou ik niet filteren op het ID van het formulier. Dat kan veranderen. Het is logischer om te filteren op naam van het formulier (met een INNER JOIN).

Als je alle meta keys van te voren weet kan je die onder elkaar queryen met een UNION ALL.

Soms weet je het niet, of kan het variëren, en dan heb je de meta keys vanut een LEFT JOIN als kolommen. Dan moet je de uitkomst nog pivoteren. Dat kan niet simpel in MySQL, je zou dat in PHP moeten doen.
 
Tim Groot

Tim Groot

27/12/2022 15:58:16
Quote Anchor link
Ad Fundum op 24/12/2022 12:25:15:
Om te beginnen zou ik niet filteren op het ID van het formulier. Dat kan veranderen. Het is logischer om te filteren op naam van het formulier (met een INNER JOIN).

Als je alle meta keys van te voren weet kan je die onder elkaar queryen met een UNION ALL.

Soms weet je het niet, of kan het variëren, en dan heb je de meta keys vanut een LEFT JOIN als kolommen. Dan moet je de uitkomst nog pivoteren. Dat kan niet simpel in MySQL, je zou dat in PHP moeten doen.


Hé Ad,

Dank voor je bericht!
Kan je me eens wat voorbeelden geven?
Ik filter op ID op het moment dat het formulier geselecteerd is. Oftewel...het ID is gelinkt aan een formulier die recent actief is geweest.
 
Ad Fundum

Ad Fundum

28/12/2022 10:37:45
Quote Anchor link
Tim Groot op 27/12/2022 15:58:16:
Kan je me eens wat voorbeelden geven?

Je zou de query kunnen uitbreiden met een nested SELECT:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
SELECT * FROM wp_gf_entry_meta WHERE form_id = (
  SELECT id FROM <tabel_van_formulier> WHERE <naam_van_formulier> = $1)

of met een INNER JOIN:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
SELECT wp_gf_entry_meta.*
FROM <tabel_van_formulier> AS t
  INNER JOIN wp_gf_entry_meta
    ON wp_gf_entry_meta.form_id = t.id
WHERE <naam_van_formulier> = $1

En als je de verschillende `meta_key` waarden van te voren weet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
WITH x AS (
  SELECT * FROM wp_gf_entry_meta WHERE meta_key = $1
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = $2
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = $3
  ...
)
SELECT form_id, meta_key, meta_value
FROM x
ORDER BY form_id, item_index

De dollartekens zijn variabelen voor prepared statements, dat is veiliger dan de werkwijze van zelf SQL statements maken door strings aan elkaar te plakken. Met prepared statements worden literals altijd correct geinterpreteerd en hoef je niet zelf te escapen.

Dan kan je het jezelf nog makkelijker maken door gebruik te maken van nowdoc:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$sql
= <<<'EOS'
SELECT
  ..
FROM
  ..
WHERE
  ..
ORDER BY
  ..
EOS;
?>

Op die manier staan de queries los van PHP, en kan je ze bijna meteen gebruiken in een andere SQL client dan PHP. (Je moet dan nog wel de variabelen (de dollartekens) vervangen voor echte waarden, maar je hoeft dan niet meer quotes te wisselen.
Gewijzigd op 28/12/2022 10:51:01 door Ad Fundum
 
Tim Groot

Tim Groot

20/01/2023 10:16:18
Quote Anchor link
Thanks Ad!
Moest me er even in verdiepen. De union All moet kunnen werken. Dat is wel gelijk een query die ik nog nooit heb gemaakt. Hoe kan ik die opbouwen?

Zoiets?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$query_data = WITH x AS (
  SELECT * FROM wp_gf_entry_meta WHERE meta_key = $1.3
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = $1.6
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = $2.1
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = $2.3
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = $2.5
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = $35
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = $36
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = $4
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = $5
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = $27
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = $8
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = $17
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = $10
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = $26.1
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = $9
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = $11
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = $20
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = $21
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = $22
)
SELECT form_id, meta_key, meta_value
FROM x
ORDER BY form_id, item_index;


Toevoeging op 20/01/2023 11:37:50:

Eigenlijk kom ik nu al een heel eind:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$query_data    = $conn->query ("SELECT * FROM wp_gf_entry_meta WHERE form_id='".$select_id."'
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = 1.3
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = 1.6
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = 2.1
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = 2.3
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = 2.5
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = 35
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = 36
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = 4
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = 5
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = 27
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = 8
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = 17
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = 10
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = 26.1
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = 9
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = 11
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = 20
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = 21
  UNION ALL SELECT * FROM wp_gf_entry_meta WHERE meta_key = 22

ORDER BY entry_id")or die(mysql_error());


Ik weet niet of ik het helemaal goed doe (waarschijnlijk nog niet).
Op dit moment lijkt hij de meta key goed te sorteren. Echter pakt hij alle formulieren (form_id) en dus een flinke lus die ik nog niet helemaal heb kunnen checken. Kan iemand meekijken?
Gewijzigd op 20/01/2023 11:50:48 door Tim Groot
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.