워드프레스 SQL은 X 제품에 대한 사용자의 이름과 성을 쿼리합니까?
우커머스 샵에서 다운로드 가능한 제품을 구매한 고객의 전체 이름과 이메일을 보여주고 싶은 SQL 쿼리를 만들고 있습니다.저는 이런 것을 찾고 있습니다.
user_id first_name last_name user_email order
---------------------------------------------------------
1 Peter Jones a12@gmail Doc_1
위 표에서 Doc_1은 상품명을 의미하며, 이 경우 user_id = 1인 고객은 Doc_1을 다운로드 받을 수 있습니다.워드프레스 사용자의 경우 표가wp_usermeta
에는 모든 사용자 정보가 포함되어 있으며 다음과 같습니다.
umeta_id user_id meta_key meta_value
---------------------------------------------
1 1 nickname petjon123
2 1 first_name Peter
3 1 last_name Jones
... ... ... ...
이 은 더 를 .meta_value[s]
이메일 등을 포함하여 모든 것이 더 쉬웠을 것입니다가 있었다면 이 훨씬 입니다.meta_key[s]
다음을 표시하는 테이블 머리글일 것입니다.first_name
그리고.last_name
서로 위로가 아니라 서로 옆에 있습니다. 질문이.first_name
, 하지만 나는 그것을 얻는 데 어려움을 겪고 있습니다.last_name
내 SQL 조회는 다음과 같습니다.
SELECT
wp_usermeta.user_id,
wp_usermeta.meta_value AS 'first_name',
Wp_woocommerce_downloadable_product_permissions_1.user_email AS 'email',
Wp_woocommerce_order_items_1.order_item_name AS 'order'
FROM Wp_woocommerce_order_items
INNER JOIN Wp_woocommerce_downloadable_product_permissions
ON Wp_woocommerce_order_items.order_id = Wp_woocommerce_downloadable_product_permissions.order_id,
(Wp_woocommerce_order_items AS Wp_woocommerce_order_items_1
INNER JOIN Wp_woocommerce_downloadable_product_permissions AS Wp_woocommerce_downloadable_product_permissions_1
ON Wp_woocommerce_order_items_1.order_id = Wp_woocommerce_downloadable_product_permissions_1.order_id)
INNER JOIN wp_usermeta
ON Wp_woocommerce_downloadable_product_permissions_1.user_id = wp_usermeta.user_id
GROUP BY wp_usermeta.user_id,
wp_usermeta.meta_value,
Wp_woocommerce_downloadable_product_permissions_1.user_email,
Wp_woocommerce_order_items_1.order_item_name,
Wp_woocommerce_order_items_1.order_item_type,
wp_usermeta.meta_key
HAVING (((Wp_woocommerce_order_items_1.order_item_type) = 'line_item')
AND ((wp_usermeta.meta_key) = 'first_name'));
이 결과는 다음과 같습니다.
user_id first_name user_email order
--------------------------------------------
1 Peter a12@gmail Doc_1
이 값들을 수동으로 확인해보니 맞지만, 결과를 그룹화하지 않으면 1000배의 결과가 나오기 때문에 데이터를 그룹화하면 기본적으로 중복을 제거하여 결과를 단순화할 수 있는데, 이는 명백히 과도한 것입니다.결과가 나타날 때까지의 실행 시간이 +/-20368.14ms이고 이 코드를 개선하는 제안에 매우 열려 있다는 점을 고려할 때 이 쿼리가 효율적인지 의문이 듭니다.이 말을 듣고, 저는 제가 다른 질문을 해야만 그 결과를 얻을 수 있다고 생각했습니다.last_name
이것을 중첩 쿼리로 만듭니다.MS Access에서 테이블을 열면 위의 쿼리인 Query1을 생성하고 Query1에 내가 원하는 결과를 얻을 수 있는 테이블로 가입합시다.이를 위한 SQL 코드는 다음과 같습니다.
SELECT
Query1.user_id,
Query1.first_name,
wp_usermeta.meta_value AS 'last_name',
Query1.user_email,
Query1.order_item_name
FROM wp_usermeta
INNER JOIN Query1
ON wp_usermeta.user_id = Query1.user_id
WHERE (((wp_usermeta.meta_value) <> '')
AND ((wp_usermeta.meta_key) = 'last_name'));
쿼리 1의 코드를 동봉하여 괄호를 사용하여 쿼리 1을 대체하려고 했지만 작동하지 않았습니다.다음 오류가 발생합니다.
SQL 구문에 오류가 있습니다. MySQL 서버 버전에 해당하는 설명서에서 '.user_id' 근처에 사용할 올바른 구문을 확인하십시오.(22행에서 SELECT wp_usermeta.user_id, wp_usermeta.meta_value AS 'first')
이거 할 줄 아는 사람?감사합니다!!
갱신하다
@Hogan이 제공한 답변에 따라 다음과 같이 생각했습니다.
SELECT
first.user_id,
first.meta_value AS 'first_name',
last.meta_value AS 'last_name',
Wp_woocommerce_downloadable_product_permissions_1.user_email,
Wp_woocommerce_order_items_1.order_item_name
FROM Wp_woocommerce_order_items
INNER JOIN Wp_woocommerce_downloadable_product_permissions
ON Wp_woocommerce_order_items.order_id = Wp_woocommerce_downloadable_product_permissions.order_id,
wp_usermeta AS last
INNER JOIN ((Wp_woocommerce_order_items AS Wp_woocommerce_order_items_1
INNER JOIN Wp_woocommerce_downloadable_product_permissions AS Wp_woocommerce_downloadable_product_permissions_1
ON Wp_woocommerce_order_items_1.order_id = Wp_woocommerce_downloadable_product_permissions_1.order_id)
INNER JOIN wp_usermeta AS first
ON Wp_woocommerce_downloadable_product_permissions_1.user_id = first.user_id)
ON last.user_id = Wp_woocommerce_downloadable_product_permissions_1.user_id
GROUP BY first.user_id,
first.meta_value,
last.meta_value,
Wp_woocommerce_downloadable_product_permissions_1.user_email,
Wp_woocommerce_order_items_1.order_item_name,
Wp_woocommerce_order_items_1.order_item_type,
first.meta_key,
last.meta_key
HAVING (((Wp_woocommerce_order_items_1.order_item_type) = 'line_item')
AND ((first.meta_key) = 'first_name')
AND ((last.meta_key) = 'last_name'));
Which works perfectly fine in MS Access but in SQL it does not. I am getting this error:
Unknown column 'first.meta_key' in 'having clause'
Why?
또한 제가 언급해야 할 것은, 제가 추가할 때.meta_key[s]
에게SELECT
다음과 같이:
SELECT
first.user_id,
first.meta_value AS 'first_name',
last.meta_value AS 'last_name',
Wp_woocommerce_downloadable_product_permissions_1.user_email,
Wp_woocommerce_order_items_1.order_item_name,
first.meta_key,
last.meta_key
I at least get no error, the query is running but it goes on and on increasing my CPU usage drastically given that I am working on a localhost.
SOLUTION
SELECT DISTINCT
속임수를 썼습니다.그룹핑 없음. 쿼리 결과는 127.76ms로 나타납니다.제 질문은 이렇습니다.
SELECT DISTINCT
first.user_id AS 'id',
first.meta_value AS 'first_name',
last.meta_value AS 'last_name',
Wp_woocommerce_downloadable_product_permissions_1.user_email AS 'email',
Wp_woocommerce_order_items_1.order_item_name AS 'order'
FROM Wp_woocommerce_order_items
INNER JOIN Wp_woocommerce_downloadable_product_permissions
ON Wp_woocommerce_order_items.order_id = Wp_woocommerce_downloadable_product_permissions.order_id,
((Wp_woocommerce_order_items AS Wp_woocommerce_order_items_1
INNER JOIN Wp_woocommerce_downloadable_product_permissions AS Wp_woocommerce_downloadable_product_permissions_1
ON Wp_woocommerce_order_items_1.order_id = Wp_woocommerce_downloadable_product_permissions_1.order_id)
INNER JOIN wp_usermeta AS first
ON Wp_woocommerce_downloadable_product_permissions_1.user_id = first.user_id)
INNER JOIN wp_usermeta AS last
ON Wp_woocommerce_downloadable_product_permissions_1.user_id = last.user_id
WHERE (((first.meta_key) = 'first_name')
AND ((last.meta_key) = 'last_name')
AND ((Wp_woocommerce_order_items_1.order_item_type) = 'line_item'));
@Hogan이 말한 것처럼 테이블을 추가하기만 하면 됩니다.wp_usermeta
또 다른 가명을 사용해서, 또 다른 이름을 짓습니다.INNER JOIN
.
Try this:
SELECT DISTINCT
pp.user_id,
first.meta_value AS 'first_name',
last.meta_value AS 'last_name',
pp.user_email AS 'email',
oi.order_item_name AS 'order'
FROM
Wp_woocommerce_order_items oi
INNER JOIN
Wp_woocommerce_downloadable_product_permissions pp ON pp.order_id = oi.order_id
INNER JOIN
wp_usermeta first ON first.user_id = pp.user_id
INNER JOIN
wp_usermeta last ON last.user_id = pp.user_id
WHERE first.meta_key = 'first_name'
AND last.meta_key = 'last_name'
AND oi.order_item_type = 'line_item'
add this join
INNER JOIN wp_usermeta AS last
ON Wp_woocommerce_downloadable_product_permissions_1.user_id = last.user_id AND last.meta_key = 'last_name'
and the column
last.meta_value AS 'last_name',
당신은 아마 그 일에 너무 열광할 필요가 없을 겁니다.()
-- 하위 쿼리를 수행하거나(사용자가 수행하지 않거나) 왼쪽 및 오른쪽 조인을 혼합하는 경우(사용자가 수행하지 않는 경우)가 아니라면 순서는 중요하지 않습니다.
ReferenceURL : https://stackoverflow.com/questions/36990165/wordpress-sql-query-the-users-first-last-name-for-product-x
'sourcecode' 카테고리의 다른 글
빈 테이블에서 쿼리 실행 속도가 느립니다.(많은 양의 삽입물을 삭제한 후 (0) | 2023.09.26 |
---|---|
Wocommerce 백엔드 제품 편집 페이지의 제품 유형 옵션에 확인란 추가 (0) | 2023.09.26 |
각2 사용자 정의 양식 입력 (0) | 2023.09.26 |
최대 청취자경고 초과: EventEmitter 메모리 누출 가능성이 감지되었습니다. 11개의 메시지 수신기가 추가되었습니다.이미터를 사용합니다.최대 청취자()를 설정하여 제한을 늘립니다. (0) | 2023.09.26 |
OSX Swift 기본 브라우저에서 URL 열기 (0) | 2023.09.26 |