wp_usermeta 테이블의 여러 행에 적격 데이터가 있는 사용자를 선택합니다.
저는 지금 찾고 있는 중입니다.user_id
데이터베이스 테이블의 다른 행에 각각 있는4개의 수식값이 모두 있습니다.
문의하는 테이블은 다음과 같습니다.
Field Type Null Key Default Extra
---------------------------------------------------------------------------
umeta_id bigint(20) unsigned PRI auto_increment
user_id bigint(20) unsigned IND 0
meta_key varchar(255) Yes IND NULL
meta_value longtext Yes NULL
MySQL 쿼리를 작성했지만 결과가 비어 있어 작동하지 않는 것 같습니다.
$result = mysql_query(
"SELECT user_id
FROM wp_usermeta
WHERE
(meta_key = 'first_name' AND meta_value = '$us_name') AND
(meta_key = 'yearofpassing' AND meta_value = '$us_yearselect') AND
(meta_key = 'u_city' AND meta_value = '$us_reg') AND
(meta_key = 'us_course' AND meta_value = '$us_course')"
);
반품 방법user_id
이 4개의 행에 관련된 것인가요?
다음 쿼리를 사용합니다.
SELECT
user_id
FROM
wp_usermeta
WHERE
(meta_key = 'first_name' AND meta_value = '$us_name') OR
(meta_key = 'yearofpassing' AND meta_value = '$us_yearselect') OR
(meta_key = 'u_city' AND meta_value = '$us_reg') OR
(meta_key = 'us_course' AND meta_value = '$us_course')
GROUP BY
user_id
HAVING
COUNT(DISTINCT meta_key)=4
모두 선택됩니다.user_id
이 네 가지 조건을 모두 충족합니다.
@fthiella의 솔루션은 매우 우아합니다.
앞으로 더 많은 것을 보여주고 싶다면user_id
join을 사용하면 필요한 모든 데이터를 한 줄에 표시할 수 있습니다.
사용하고 싶은 경우AND
조건 및 조건이 표에 여러 줄로 표시되어 있습니다.JOINS
예:
SELECT `w_name`.`user_id`
FROM `wp_usermeta` as `w_name`
JOIN `wp_usermeta` as `w_year` ON `w_name`.`user_id`=`w_year`.`user_id`
AND `w_name`.`meta_key` = 'first_name'
AND `w_year`.`meta_key` = 'yearofpassing'
JOIN `wp_usermeta` as `w_city` ON `w_name`.`user_id`=`w_city`.user_id
AND `w_city`.`meta_key` = 'u_city'
JOIN `wp_usermeta` as `w_course` ON `w_name`.`user_id`=`w_course`.`user_id`
AND `w_course`.`meta_key` = 'us_course'
WHERE
`w_name`.`meta_value` = '$us_name' AND
`w_year`.meta_value = '$us_yearselect' AND
`w_city`.`meta_value` = '$us_reg' AND
`w_course`.`meta_value` = '$us_course'
기타: 준비된 스테이트먼트를 사용하는 것을 권장합니다.mysql_*
함수는 SQL 주입 저장 기능이 아니므로 더 이상 사용되지 않습니다.코드를 가능한 한 적게 변경하고 싶다면mysqli_
기능: http://php.net/manual/en/book.mysqli.php
권장 사항:
이 표의 인덱스를 사용합니다. user_id
be와 인덱스를 강력히 추천하며, 또한 be와 인덱스를 추천한다.meta_key
그리고.meta_value
또한 빠른 쿼리 실행을 위해 사용됩니다.
설명:
사용하시는 경우AND
한 줄에 대한 조건을 '연결'합니다.따라서 여러 줄의 AND 조건을 사용하려면 먼저 다음과 같이 여러 줄에서 한 줄을 작성해야 합니다.
검정: 표 데이터:
PRIMARY INDEX
int varchar(255) varchar(255)
/ \ |
+---------+---------------+-----------+
| user_id | meta_key | meta_value|
+---------+---------------+-----------+
| 1 | first_name | Kovge |
+---------+---------------+-----------+
| 1 | yearofpassing | 2012 |
+---------+---------------+-----------+
| 1 | u_city | GaPa |
+---------+---------------+-----------+
| 1 | us_course | PHP |
+---------+---------------+-----------+
쿼리 결과:$us_name='Kovge'
$us_yearselect='2012'
$us_reg='GaPa'
,$us_course='PHP'
:
+---------+
| user_id |
+---------+
| 1 |
+---------+
효과가 있을 거야
UCM(Unified Content Model)이라고 하는 것으로 설계된 테이블을 쿼리하고 있습니다.이 테이블 구조는 데이터의 유연성을 최대한 높이는 것이 바람직할 때 선택됩니다.이 구조의 단점은 효율이 저하되고, 일반적으로 테이블이 데이터로 인해 매우 비대해지고, 일반적으로 "pivot"이라고 불리는 기술을 사용하여 집계 함수와 관련된 테이블을 쿼리하는 것입니다.
다음은 피벗을 사용하여 쿼리를 실행하는 방법입니다(db-fiddle 데모).
SELECT user_id
FROM wp_usermeta
GROUP BY user_id
HAVING MAX(IF(meta_key = 'first_name', meta_value, NULL)) = 'mangesh'
AND MAX(IF(meta_key = 'yearofpassing', meta_value, NULL)) = '2013'
AND MAX(IF(meta_key = 'u_city', meta_value, NULL)) = 'n/a'
AND MAX(IF(meta_key = 'us_course', meta_value, NULL)) = 'programming'
실제로 테이블 전체가 다음 순서로 그룹화 됩니다.user_id
기둥.이를 통해 1대 다의 중간 관계가 형성된다.즉, 각각은user_id
에는 MySQL의 집계 함수(예: 플랫이 아닌 비선형)로 조회할 수 있는 데이터(예: 1행 이상의 데이터)가 있습니다.MAX()
를 참조해 주세요.
GROUP BY가 있다(GROUP BY가 있다)." 에서 "데이터 "를 하여 데이터를 할 수 .meta_key
되었을 때meta_key
.meta_value
디폴트값의 구별을 지정합니다.이 「」에 됩니다.IF
있는 이외의을 알 수 은, 「NULL」을 호출하면 할 수 있습니다.이 값은 콜을 통해 액세스 됩니다.MAX()
필터링 대상 실제 값과 비교하려면 이 최대값을 사용합니다.비즈니스 로직을 만족시키기 위해 필요한 만큼 이 필터를 반복합니다.
또한 안전한 코딩 방식을 사용하고 있지 않다는 점도 말씀드려야 합니다. mysql_query()
는 현재 권장되지 않으며 어떠한 이유로도 현재 라이브코드에 존재할 수 없습니다.security.mysqli에 바인드된 하여 준비된 할 것을 합니다.
$sql = "SELECT user_id
FROM wp_usermeta
GROUP BY user_id
HAVING MAX(IF(meta_key = 'first_name', meta_value, NULL)) = ?
AND MAX(IF(meta_key = 'yearofpassing', meta_value, NULL)) = ?
AND MAX(IF(meta_key = 'u_city', meta_value, NULL)) = ?
AND MAX(IF(meta_key = 'us_course', meta_value, NULL)) = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param('ssss', $us_name, $us_yearselect, $us_reg, $us_course);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($user_id);
$stmt->fetch();
echo $user_id;
언급URL : https://stackoverflow.com/questions/16249731/select-user-having-qualifying-data-on-multiple-rows-in-the-wp-usermeta-table
'source' 카테고리의 다른 글
높은 CPU 소비량 MySQL (0) | 2023.01.09 |
---|---|
PHP의 ::(이중 콜론)과 ->(화살표)의 차이점은 무엇입니까? (0) | 2022.12.25 |
SQL Provier를 dotnet core 3.1 MySQL(실제로는 MariaDB)에서 작동시키는 방법 (0) | 2022.12.25 |
데이터베이스에서 생성된 열 값을 JPA 및 최대 절전 모드에서 읽기 전용 필드로 정의하는 방법은 무엇입니까? (0) | 2022.12.25 |
vuex의 상태를 기반으로 보기를 전환하려면 어떻게 해야 합니까? (0) | 2022.12.25 |