gPdus
92
2019-10-28 14:02:33 작성 2019-10-29 09:43:13 수정됨
6
287

코드리뷰 부탁드립니다(코드좀 봐주세여ㅠㅠ)


우선 제가 원하는 건

플레이 명              플레이1                             플레이2                             플레이3                   플레이4
 플레이 1    cat-4262795_960_720.jpg   김메주와_고양이들.jpg              X                       X          삭제

이렇게 나오게 하고싶은데


이런식으로 나뉘어져서 나오고 있습니다.. 어떻게 고쳐야 할지 조언부탁드립니다ㅠㅠ


jsp

<body onload="fileList()">
	<div class="table-responsive-sm">
		<table class="table table-centered mb-0" style='text-align: center;'>
			<thead>
				<tr>
					<th>PLAY NAME</th>
					<th>1 PLAY</th>
					<th>2 PLAY</th>
					<th>3 PLAY</th>
					<th>4 PLAY</th>
					<th>삭제</th>
				</tr>
			</thead>
			<tbody id="list"></tbody>
		</table>
	</div>
</body>
<script type="text/javascript">
	//전체 플레이 리스트
	function fileList() {
		$.ajax({
			url : "allFileList?cen_no=${cen_no}",
			type : "post",
			dataType : "text",
			success : function(data) {
				$('#list').html(data);
			},
			error : function(error) {
				console.log(error);
			}
		});
	}
</script>


java 코드는 이렇게 작성했습니다 

public String allFileList(HttpServletRequest request) {
		StringBuilder sb = new StringBuilder();
		Map<String, Object> map = new HashMap<String, Object>();
		String cen_no = request.getSession().getAttribute("cen_no").toString();
		map.put("cen_no", cen_no);
		ArrayList<HashMap<String, Object>> fileList = bDao.allFileList(cen_no); // 파일 리스트 담아오기
		System.out.println("리스트=" + fileList);
		String file_orgName = "X";
		if (fileList.size() != 0) {// 리스트가 존재하면
			for (int i = 0; i < fileList.size(); i++) {
				String play_name = fileList.get(i).get("PLAY_NAME").toString();
				// file_orgName = fileList.get(i).get("FILE_ORGNAME").toString();
				map.put("play_name", play_name);
				ArrayList<HashMap<String, Object>> nList = bDao.fileNameList(map);
				System.out.println("이름"+nList);
				for (int j = 0; j < nList.size(); j++) {
					file_orgName = nList.get(j).toString();
					sb.append("<tr><td>" + play_name + "</td><td>" + file_orgName + "</td><td>" + file_orgName
							+ "</td><td>" + file_orgName + "</td><td>" + file_orgName
							+ "</td><td><button type='button' onclick='forward(this)'>삭제</button></td></tr>");
				}
			}
		} else {
			sb.append("<h1 style='text-align:center'>파일을 등록해주세요.</h1>");
		}
		return sb.toString();
	}

콘솔에 fileList(리스트)와 nList(이름)를 찍었을 때 차례대로

리스트 =[{CEN_NO=24, FILE_ORGNAME=angry-animal-cat-1331821-1024x683.jpg, PLAY_NAME=플레이 2}, {CEN_NO=24, FILE_ORGNAME=angry-animal-cat-1331821-1024x683.jpg, PLAY_NAME=플레이 2}, {CEN_NO=24, FILE_ORGNAME=cat-4262795_960_720.jpg, PLAY_NAME=플레이 1}, {CEN_NO=24, FILE_ORGNAME=cat-4262795_960_720.jpg, PLAY_NAME=플레이 1}, {CEN_NO=24, FILE_ORGNAME=김메주와_고양이들.jpg, PLAY_NAME=플레이 1}, {CEN_NO=24, FILE_ORGNAME=김메주와_고양이들.jpg, PLAY_NAME=플레이 1}]

->이렇게 한번 나온 후

이름 =[{FILE_ORGNAME=angry-animal-cat-1331821-1024x683.jpg}]

->이렇게 두번 나온 후

이름 =[{FILE_ORGNAME=cat-4262795_960_720.jpg}, {FILE_ORGNAME=김메주와_고양이들.jpg}]

->이렇게 네번 나옵니다


DB는

FILE_PLAY_TB

FILE_TB


mapper는

	<select id="allFileList" parameterType="String" resultType="HashMap">
		SELECT F.CEN_NO, F.PLAY_NAME, F.FILE_ORGNAME
		FROM FILE_PLAY_TB FP
		INNER JOIN FILE_TB F
		ON FP.CEN_NO = F.CEN_NO
		WHERE FP.CEN_NO = #{cen_no}
	</select>
	
	<select id="fileNameList" parameterType="HashMap" resultType="HashMap">
		SELECT FILE_ORGNAME FROM FILE_TB WHERE CEN_NO = #{cen_no} AND PLAY_NAME = #{play_name}
	</select>

이런식으로 하고 있는데 어느부분을 손봐야 구현하고 싶은 대로 나올까여ㅠㅠㅠㅠ

0
0
  • 답변 6

  • ondaa
    3k
    2019-10-28 16:27:54

    for 문 이상한거 같은데요 ;;


    list = [ 플레이어1, 플레이어2 ]


    for (int i = 0; i < list.size(); i++) {
      <tr>

        <td> list[i].name (플레이어 이름) </td>

        <td> list[i].file (플레이어 파일) </td>

        <td> list[i].info (플레이어 정보) </td>

      </tr>
    }


    이렇게 해야되는거 아닌가요??

    html table 문법을 잘 모르시는 것 같네요

    0
  • gPdus
    92
    2019-10-29 09:37:47

    NoDe

    혹시 설명을 더 추가해서 수정했는데 다시 봐주실 수 있을까여..
    위에 써주신거 대로는 감이 잘 안 와서..ㅠㅠㅜㅠ

    0
  • ondaa
    3k
    2019-10-30 09:35:50 작성 2019-10-30 09:46:16 수정됨

    음 지금 말씀하시는게  플레이어는 가로 방향이고 값 즉, 파일은 세로방향으로 놓고 싶다는 말씀이신거죠??

    플레이 명플레이1플레이2플레이3플레이4
    플레이 1cat-4262795_960_720.jpg
    김메주와_고양이들.jpg
    XX
    플레이 2cat-4262795_960_720.jpg
    김메주와_고양이들.jpg
    XX
    플레이 3cat-4262795_960_720.jpg
    김메주와_고양이들.jpg
    XX


    이런식으로요

    흠.. 확실히 어떤걸 원하시는지 감이 잘 안잡혀서요 ^^;;

    구현하시려는게 정확히 어떤건지 알아야 할 것 같습니다.

    0
  • gPdus
    92
    2019-10-30 17:16:20

    NoDe


    이런식으로 나와야 합니당 ㅠㅠㅠ

    0
  • ondaa
    3k
    2019-10-30 21:53:50

    음... 일단 group by 나 distinct 로 중복제거 하면 6 개에서 3개로 줄어들겁니다.

    SELECT F.CEN_NO, F.PLAY_NAME, F.FILE_ORGNAME

    FROM FILE_PLAY_TB FP INNER JOIN FILE_TB F

    ON FP.CEN_NO = F.CEN_NO WHERE FP.CEN_NO = ${cen_no} GROUP BY F.FILE_ORGNAME


    여기까지는 이해가 가실겁니다. 

    그 다음이 문제인데...

    쿼리 한번으로는 저대로 못만들고 CONCAT 이라는 걸 써야 할 것 같습니다.

    SELECT 에서 F.FILE_ORGNAME 대신 다음과 같은걸 씁니다.

    GROUP_CONCAT ( F.FILE_ORGNAME ) as FILENAME


    그럼 아래와 같이 뜰거라고 생각됩니다.

    24플레이1
    cat-4262795_~.jpg, 김메주와_고양이들


    24플레이2angry_animal_cat_133.jpg



    그 다음 FILENAME 에서 꺼낸 값을 쉼표(,) 기준으로 split 해주면 됩니다.

    그럼 array 가 되는데 이걸 td 에 맞게 랜더링 해주면 될 것 같습니다.


    SELECT F.CEN_NO, F.PLAY_NAME, GROUP_CONCAT ( F.FILE_ORGNAME ) as FILENAME

    FROM FILE_PLAY_TB FP INNER JOIN FILE_TB F

    ON FP.CEN_NO = F.CEN_NO WHERE FP.CEN_NO = ${cen_no} GROUP BY F.FILE_ORGNAME


    생각 대로 될지는 모르겠지만 응용해보시기 바랍니다.



    0
  • gPdus
    92
    2019-11-01 16:56:30

     NoDe


    흐에 감사합니다!!!
    조언해주신대로 해보겠습니당ㅎㅎ

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.