Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie
Toon posts:

[WordPress] MySQL query werkt niet

Pagina: 1
Acties:

Vraag


  • Hedva
  • Registratie: augustus 2010
  • Laatst online: 24-01 21:01
Oke,

Ik ben er bijna maar lukt niet helemaal.

Ik heb een tabel 'wp_postmeta'. Daarin moet ik m'n info vandaan halen.
Ik heb een gegeven: $lesson_id. Daarmee kan ik de ID van de huidige les ophalen. Voor dit voorbeeld even 95. Met dat lesson id wil ik vervolgens de bijhorende boeken vinden en daar gebruik van maken.

wp_postmeta
meta_idpost_idmeta_keymeta_value
897216_lpr_book_urlwww.wikibooks.org/1
901216_thumbnail_id272
910276_thumbnail_id277
911276_lpr_book_urlwww.wikibooks.org/2
1001216_lpr_lesson95
1002276_lpr_lesson95


Ik ga dus meta_value's af om alle's met 95 te vinden. Daar wil ik de post_id's van hebben. In dit geval 216 en 276. Vervolgens wil ik met die post_id's de bijhorende _lpr_book_url's en _thumbnail_id's hebben om die vervolgens te kunnen gebruiken

Side note: of ik nou dingen als AS p / AS pm wel of niet gebruik maakt niet uit. Het werkt tot zover niet.


Als ik dit gebruik:

PHP:
2
3
4
5
6
7
8
9
10
$books_id = $wpdb->get_results(
    "
    SELECT      pm.post_id
    FROM        $wpdb->postmeta  AS pm
    WHERE       pm.meta_value = $lesson_id
    "
);

print_r($books_id);


Wat ik vervolgens terug krijg is dit:
code:
1
Array ( [0] => stdClass Object ( [post_id] => 216 ) [1] => stdClass Object ( [post_id] => 276 ) )


En dat is goed. Want inderdaad, bij die les horen boek id's 216 en 276.

Nu het volgende:
PHP:
2
3
4
5
6
7
8
9
$books = $wpdb->get_results (
    "
    SELECT      meta_value
    FROM        $wpdb->postmeta
    WHERE       post_id = 216
    AND         (meta_key = '_lpr_book_url'  OR  meta_key = '_thumbnail_id')
    "
);


Krijg ik terug terug:

code:
1
Array ( [0] => stdClass Object ( [meta_value] => https://en.wikibooks.org/1 ) [1] => stdClass Object ( [meta_value] => 272 ) )


En dat is ook goed. Want die link en thumbnail id horen daarbij. Maar zoals je ziet. Heb ik post_id er gewoon ingezet. '216'. Eigenlijk moet dat variabel zijn, want er kunnen meerdere boeken bij horen, en van te voren weet ik niet welke boek erbij hoort.

post_id = 216 vervangen voor post_id = $books_id werkt niet. Dan komt er gewoon helemaal niks uit.

Daarom geprobeerd om het samen te voegen van de code. Dit werkt alleen ook niet:

PHP:
2
3
4
5
6
7
8
9
10
11
12
13
  $books = $wpdb->get_results(
    "
    SELECT      meta_value
    FROM        $wpdb->postmeta
    WHERE       (meta_key = '_lpr_book_url'  OR  meta_key = '_thumbnail_id')
    AND         post_id = (
                  SELECT      post_id
                  FROM        $wpdb->postmeta
                  WHERE       meta_value = $lesson_id  
    )
    "
  );


Krijg ik niks terug. Als ik GROUP BY meta_value onder de 2e WHERE zet, dan krijg ik wel een respons.
code:
1
Array ( [0] => stdClass Object ( [meta_value] => https://en.wikibooks.org/1 ) [1] => stdClass Object ( [meta_value] => 272 ) )


Maar dan krijg ik er maar 1 terug; de eerste die die tegenkomt lijkt het. GROUP BY post_id haalt niks uit.

Wat doe ik in godsnaam verkeerd? Ik zou toch denken dat het laatste goed zou zijn.

Beste antwoord (via Hedva op 28-08-2016 03:49)


  • NMe
  • Registratie: februari 2004
  • Laatst online: 22:39

NMe

Quia Ego Sic Dico.

Vervang de = voor je subquery eens door IN.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Alle reacties


Acties:
  • Beste antwoord
  • +2Henk 'm!

  • NMe
  • Registratie: februari 2004
  • Laatst online: 22:39

NMe

Quia Ego Sic Dico.

Vervang de = voor je subquery eens door IN.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Hedva
  • Registratie: augustus 2010
  • Laatst online: 24-01 21:01
NMe schreef op zaterdag 27 augustus 2016 @ 22:23:
Vervang de = voor je subquery eens door IN.
Echt waar he... Ik ga niet eens vertellen hoe lang ik hier mijn hoofd over gebroken heb en wat ik allemaal al kapot heb gemaakt in deze ruimte.

Maar in ieder geval; Echt ontzettend bedankt! Je hebt geen idee hoe blij je me nu hebt gemaakt!

Ik vind het altijd zo kut om te vroeg een vraag te stellen maar misschien dat ik het voortaan toch wat eerder moet vragen |:(


Ow dit topic was trouwens bedoeld als vraag, maar nu kan ik je antwoord niet selecteren als goede antwoord :/

[Voor 10% gewijzigd door Hedva op 27-08-2016 22:41]


  • Hmail
  • Registratie: april 2003
  • Laatst online: 22:18

Hmail

Doet ook maar wat.

De manier om dit te doen in wordpress is overigens via een meta_query:
PHP:
1
2
3
4
5
6
7
8
9
$args = array(
   'meta_query' => array(
       array(
           'key' => '_lpr_lesson',
           'value' => 95,
       )
   )
);
$query = new WP_Query($args);

It might sound as if I have no clue what I'm doing, but I actually have a vague idea.



Apple iPhone 12 Microsoft Xbox Series X LG CX Google Pixel 5 Sony XH90 / XH92 Samsung Galaxy S21 5G Sony PlayStation 5 Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True