Mam niestandardową tabelę "Zamówienia", w których zapisuję dane zamówień.

| id | user_id | product

W ten sposób otrzymuję z niego dane.

$orders = $wpdb->get_results( 
   "
   SELECT * 
   FROM sbgf_pl_orders
   ORDER BY ID DESC
   LIMIT 500
");

foreach ( $orders as $order ){ 
  echo $order->id;
}

Chcę połączyć moją prośbę z tabelą_metową, dzięki czemu otrzymałbym zamówienia od tych użytkowników, których profil ma określoną metodę dostawy jako Suer Meta "Shipping_method".

Próbowałem tego, ale ta prośba przeciąża moją witrynę

$orders = $wpdb->get_results( 
   "
   SELECT * 
   FROM sbgf_pl_orders, sbgf_user_meta
   WHERE sbgf_user_meta.shipping_method = '1' AND sbgf_user_meta.user_id=sbgf_user_meta.user_id
   ORDER BY ID DESC
   LIMIT 500
");

foreach ( $orders as $order ){ 
  echo $order->id;
}
1
user3514052 24 luty 2019, 19:57

2 odpowiedzi

Najlepsza odpowiedź

Nie dołączasz do tabel prawidłowo:

AND sbgf_user_meta.user_id=sbgf_user_meta.user_id

Warunek ten będzie zawsze prawdą, a twoja łąka wynika w produkcie kartezjańskim między użytkownikami a zamówieniami mającą metodę wysyłki 1.

Należy również zawsze korzystać z jawnych połączeń zamiast starej szkoły, dołączenia dołączenia, jak wyjaśniono na przykład w To tak odpowiedz.

Wreszcie, jest to również dobra praktyka, aby aliasować tabele w zapytaniu i prefiksu kolumn z tymi aliasami. To sprawia, że zapytanie łatwiej jest odczytać i utrzymywać i uniknąć dwuznaczności, gdy nazwy kolumnowe konflikt.

Twoje zapytanie powinno wyglądać jak:

SELECT * 
FROM sbgf_pl_orders ord
INNER JOIN sbgf_user_meta usr ON usr.shipping_method = 1 AND usr.user_id = ord.user_id
ORDER BY ord.ID DESC
LIMIT 500
1
GMB 24 luty 2019, 18:10

@Gmb Dziękujemy za pomysł. Domyślam się, jak to zrobić dobrze

$orders = $wpdb->get_results( 
            "
            SELECT *
            FROM sbgf_pl_orders ord
            INNER JOIN sbgf_usermeta m1 ON (ord.user_id = m1.user_id AND m1.meta_value = '1'
            ORDER BY ord.ID DESC
            LIMIT 500
            "
          );
1
user3514052 24 luty 2019, 20:20