MySQL에서 쿼리할 때 테이블 연결
테이블이 3개 있습니다.tco_articles,tco_module_eostext그리고.tco_articles_modules.나의tco_articles독특함이 있습니다.id열쇠. 기사마다 하나씩. 내.tco_module_eostext독특함이 있습니다.instance_id그것은 각각의 기사에 속합니다.tco_articles_modules모두 포함함article_ids, 하지만 9배는 가지고 있습니다.instance_id다른 테이블에서 사용되는 s.
제가 가질 수 있게.article_id와 함께instance_id당신이 질문을 할 때.tco_module_eostext빈 채로 돌아올 것입니다.
정확한 기사 본문을 돌려줄 수 있는 질문을 하고 싶습니다.
지금까지 전해드렸습니다.
global $wpdb;
$posts = array();
$ids = $wpdb->get_results('SELECT DISTINCT instance_id, article_id FROM tco_articles_modules', ARRAY_A);
이렇게 하면 다음과 같은 모든 인스턴스와 ID가 있는 배열이 반환됩니다.
Array
(
[0] => Array
(
[instance_id] => 928615
[article_id] => 129396
)
[1] => Array
(
[instance_id] => 928616
[article_id] => 129396
)
[2] => Array
(
[instance_id] => 928617
[article_id] => 129396
)
[3] => Array
(
[instance_id] => 928618
[article_id] => 129396
)
당신은 알 수 있습니다.article_ids는 같지만,instance_id. 니가 넣을때
$wpdb->get_results('SELECT body FROM tco_module_eostext WHERE instance_id=928617 ', ARRAY_A);
당신은 비게 될지도 모르지만, 당신을 위해.
$wpdb->get_results('SELECT body FROM tco_module_eostext WHERE instance_id=928618 ', ARRAY_A);
본문이 있을 수도 있습니다.
이것은 내 문제입니다.모두 살펴보고 비어있지 않은 것을 걸러서 정확한 기사를 배정해야 합니다.그럭저럭 기사들을 출력해냈습니다.
foreach ($ids as $key => $value) {
$instance_ID = $value['instance_id'];
$article_ID = $value['article_id'];
$article_out = $wpdb->get_results('SELECT * FROM tco_articles WHERE id='.$article_ID.' ', ARRAY_A);
$posts[$article_ID] = $article_out[0];
}
다음과 같은 것을 반환합니다.
Array
(
[129396] => Array
(
[id] => 129396
[headline] => Bla bla bla title
[intro] => This is cool article intro
[needs_review] => 0
[published] => 2014-12-16 09:17:00
[unpublished] =>
[hidden] => 0
[no_single_page] => 0
[permalink] => link-perma-link-here
[internal_slug] =>
[type_id] => 3
[thread_id] => 0
[news_id] => 0
[header_game_id] => 0
[puff_hh_id] => 0
[puff_title] =>
[hdrcol_id] => 900
[review_queued] =>
[lock_timeout] => 0
[created] => 2014-12-16 09:17:00
[updated] => 2015-01-16 13:51:30
[created_by] => 84142
[updated_by] => 84142
)
...
이제 저는 다음 내용을 추가하겠습니다.body에서 온 텍스트tco_module_eostext테이블.
이 작업을 자동으로 수행하거나 한 번에 이 작업을 수행한 다음 에 추가하는 데 사용할 수 있는 쿼리가 있습니까?$posts배열?
각 조회 방법은 180000개 이상의 게시물이 있을 때 다소 느립니다.
어떤 도움이든 감사히 받겠습니다.
항상 하나의 행만 있는 경우tco_module_eostext각각을 상대로article_id, 사용가능JOIN(inner 조인), 각 행에 하나씩만 표시됩니다.article_id.
SELECT a.*, t.body
FROM tco_articles a
JOIN tco_articles_modules m ON m.article_id = a.id
JOIN tco_module_eostext t ON m.instance_id = t.instance_id
//WHERE .....
그러나 다른 두 개의 테이블에 항목이 없는 경우 일부 항목의 행은 표시되지 않습니다.article_id. 하지만 이 문제를 해결할 방법은 아직 있습니다.사용할 수 있습니다.LEFT OUTER JOIN그 다음에 우리가 참여할 수 있도록 해야 합니다.tco_module_eostext여하튼instace_id. 이것은 당신이 최소한 기사 정보를 얻는 것을 보장할 것입니다.tco_articles다른 테이블에 데이터가 없을 때 테이블.
SELECT a.*, t.body
FROM tco_articles a
LEFT OUTER JOIN tco_articles_modules m ON m.article_id = a.id AND EXISTS ( SELECT NULL FROM tco_module_eostext WHERE instance_id = m.instance_id )
LEFT OUTER JOIN tco_module_eostext t ON m.instance_id = t.instance_id
//WHERE .....
join과 함께 쿼리를 사용하는 것은 어떨까요?
테스트 안 함!:
SELECT
article.*,
text.body as bodytext
FROM
tco_articles_modules AS modules LEFT OUTER JOIN
tco_module_eostext AS text ON
modules.instance_id = text.instance_id LEFT OUTER JOIN
tco_articles AS article ON
article.id = modules.article_id
그것은 모든 물품을 할당 받은 상태로 받아야 합니다.article_id부터tco_articles_modules
더 빠른 쿼리를 위해 외부 조인을 내부 조인으로 대체할 수 있습니다.또한 쿼리에서 필터링하기 위한 WHERE 조건을 원할 수도 있습니다.또한 mysql 테이블의 올바른 색인을 주의하십시오. 각 조인 열은 색인화되어야 합니다. 이는 훨씬 더 빠른 결과를 얻을 수 있습니다.
언급URL : https://stackoverflow.com/questions/34412630/connecting-tables-when-querying-in-mysql
'programing' 카테고리의 다른 글
| 싱글톤과 원형 콩의 차이점은 무엇입니까? (0) | 2023.10.01 |
|---|---|
| 대형 디브 내부의 이미지 센터(수직 및 수평)를 만드는 방법 (0) | 2023.10.01 |
| 워드프레스에서 API로 새로운 사용자를 생성할 때 이메일 비밀번호를 보내는 방법은? (0) | 2023.10.01 |
| ASP의 루트 디렉터리를 가져오려면 어떻게 해야 합니까?NET 서버 애플리케이션? (0) | 2023.10.01 |
| mariadb 서버에서 .csv 파일 형식의 리눅스 서버로 데이터베이스 테이블 자동 내보내기 (0) | 2023.10.01 |
