테스트 사이트 - 개발 중인 베타 버전입니다

join 질문드립니다 [재질문] 채택완료

김준수사랑 5개월 전 조회 976

 

free 자유게시판이 있는데 text 필드를 많이 추가해야 해서 
free_data 만들고 여기에 text 필드를 많이 추가했습니다
로그인한 사용자들에게는 free_data 필드를 같이 불러와서 뿌려줘야하는데요

아래처럼 테이블에 b 테이블에 필드명을 안쓰고 b.* 이렇게하니까
b에 값이 없으면 a테이블도 안나오네요
a 테이블은 무조건 다 나와야하고
b에 필드가 많아서 b.* 사용했으면 합니다

 

SELECT a.*,  b.*   
FROM g5_write_free AS a
LEFT JOIN g5_write_free_data AS b
  ON a.wr_id = b.wr_id
ORDER BY a.wr_num DESC
LIMIT 0, 10;

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

채택된 답변
+20 포인트
5개월 전

나오는 것이 정상입니다.

나오지 않는다면,
g5_write_free_data 테이블에 wr_id 칼럼이 없거나,
wr_id 칼럼의 타입이 int 가 아닐 가능성이 높습니다. 
(g5_write_free 테이블의 wr_id 칼럼 타입과 일치해야 합니다.)

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

김준수사랑
5개월 전
$row = sql_fetch("")
이걸로 불러온다음에 echo $row['wr_id']; 찍어보니까 값이 없는데요...
echo 찍어서 보니까 b 테이블에 값이 없어서 wr_id null 이란 필드가 뒤에 생겼는데...
이럴땐 어떻게 a 테이블에 있는 wr_id 를 가져오죠?
마르스컴퍼니
5개월 전
SELECT a.*, a.wr_id as a_wr_id, b.*, b.wr_id as b_wr_id


=>
$row['a_wr_id'] // a 테이블의 wr_id
$row['b_wr_id'] // b 테이블의 wr_id
김준수사랑
5개월 전
감사합니다!!!

댓글을 작성하려면 로그인이 필요합니다.

5개월 전

이렇게 해보시겠어요 ? 여건상 테스트는 못해봤습니다.

 

</p>

<pre>
<code>$columnQuery = "SELECT GROUP_CONCAT(CONCAT('b.', COLUMN_NAME) SEPARATOR ', ') as column_list
                FROM INFORMATION_SCHEMA.COLUMNS 
                WHERE TABLE_NAME = 'g5_write_free_data' 
                AND TABLE_SCHEMA = '데이터베이스이름작성'";

$result = mysqli_query($conn, $columnQuery);
$row = mysqli_fetch_assoc($result);
$bColumns = $row['column_list'];

$finalQuery = "SELECT a.*, {$bColumns}
               FROM g5_write_free a
               LEFT JOIN g5_write_free_data b ON a.wr_id = b.wr_id
               ORDER BY a.wr_num DESC
               LIMIT 0, 10";</code></pre>

<p><font face="monospace"><span style="font-size: 11.375px;">

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인