묻고답하기
DB내용 읽어서 표 자동생성하는 방법?
2015.06.29 16:15
우선 문제를 풀게 되면 DB에 다음과 같이 기록합니다.
nick_name time
관리자 4:00
이런식으로 문제를 푼 사람과 푼 시간이 기록됩니다.
이제 이걸 가능하면 php를 사용해서 해당 테이블의 내용을 표 형식으로 뿌려주고 싶습니다.
<table width="200" border="1"> <tr> <?php for($i=1;$i<=15;$i++){ echo "<td>".$i."</td>"; if($i%5==0){ echo "</tr><tr>"; } } ?> </tr> </table>
이런 코드를 이용하면 php를 이용해서 자동으로 표를 그려줄수야 있겠지만
위 방법은 DB와 상관없이 정적으로 정해진 숫자대로만 표를 그리기 때문에 사용을 못하고 있습니다.
하지만 전 동적으로 DB의 데이터를 읽어와서 문제풀이자가 5명이 되면
순위 팀명 시간
1 팀1 3:10
2 팀4 3:30
3 팀2 3:50
4 팀5 4:01
5 팀3 5:32
이런식으로 뿌려주고 싶습니다..
테이블에 있는 데이터 개수를 파악하고 시간 순으로 정렬을 해서 뿌려줘야하는건데..
어떻게 해야할까요..ㅠㅠ
조그만 아이디어라도 좋습니다 ㅠ
댓글 7
-
ehii
2015.06.29 18:02
-
제노0248
2015.06.30 09:37
정리하신 내용 중 3번이 이해가 안가신다 하여 추가로 말씀드립니다.
처음 홈페이지를 열고 사람들이 문제를 풀러 들어오면 아직 푼 사람이 아무도 없겠죠?
그럼 DB의 문제풀이자 테이블에는 아무 내용도 없습니다.
그런데 문제는 3~5명이 한 팀을 이뤄 하나의 아이디로 풀게 됩니다.
그래서 닉네임은 팀 이름이 들어가게 되는거구요.
이제 만약 team5라는 팀이 제일 먼저 문제를 풀게되면
DB 테이블에는
nick_name solve_time
team5 2015-06-30 09:33
이렇게 첫번째 데이터가 들어가게 됩니다.
그럼 이제 퀴즈가 나오는 페이지의 가장 아래에
순위 팀명 시간
1 team5 2015-06-30 09:33
이렇게 나오게 해야합니다.
그리고 두번째로 team1이라는 팀이 문제를 풀게 되면
역시 같은 방식으로 DB 테이블에 팀명과 시간이 기록되게 되고
이 내용을 가져와서 퀴즈 페이지에 있는 표의 내용이 다음과 같이 바뀌어야 합니다.
순위 팀명 시간
1 team5 2015-06-30 09:33
2 team1 2015-06-30 10:02
이런식으로요.
DB테이블에 데이터가 하나하나 쌓일 때마다
표가 아래쪽으로 시간 기준 오름차순 정렬이 되어야합니다.
사실 굳이 오름차순 정렬을 할 필요 없이 어차피 DB에는 시간 순으로 들어가게 되니
DB테이블의 데이터를 순서대로 출력해주는 것만 되어도 좋습니다.
이 댓글의 내용이 이해가 가실지 모르겠네요.(워낙 설명을 잘 못해서요 ㅠ)
우선 달아주신 댓글의 코드 한 번 이해해보고 시도해본 뒤 잘 적용된다면 바로 댓글 달겠습니다~
좋은 답변 감사합니다 ^^
아 DB의 내용은 include "./dbconn.php"; 이런식으로 해서 DB에 연결하고 가져오고 있습니다.
혹시나 해서 퀴즈 페이지의 주소도 남겨두겠습니다.
한 번 보시려면 로그인은 test/test로 해서 보시면 될 것 같습니다.
http://211.44.33.103/index.php?mid=prob1
-
제노0248
2015.06.30 09:53
$query = mysql_query("SELECT * FROM quiz.prob1 ORDER BY solve_time asc;");
$result = mysql_fetch_array($query);
if(!is_array($result)) $result = array($result); // 쿼리 결과값이 1개인 경우 에러 fixecho("<table>");
for($i=0; $i<sizeof($result)-1; $i++)
{
$count++;
echo("<tr><td>".$count."</td><td>".$result[$i]->nick_name."</td><td>".$result[$i]->solve_time."</td></tr>");
}
echo("</table>");현재 DB연결 부분을 살짝 수정해서 다음과 같이 고쳤습니다.
(DB에 시간 저장하는 부분은 time이 아니라 solve_time이라 고쳤습니다)
그랬더니 일단은
1
2
3
닉네임이나 푼 시간은 안뜨고 저렇게만 뜨네요..
그리고 if(!is_array...) 이 부분은 배열이 아닐 경우 배열로 형변환을 해줘서 다시 넣어주는 부분인듯하고,
아래 for문을 잠시 주석처리하고 echo $result[0]; echo $result[1]; echo $result[2];echo $result[3]; ... 이런식으로 써줘도
DB의 가장 첫번째 데이터인
관리자 2015-06-29 12:25:26
이렇게까지 밖에 안나오고 두번째, 세번째 데이터들은 안나오네요..
근데 저 쿼리문을 heidiSQL에 직접 입력해보면 정상적으로 prob1의 모든 데이터가 시간순으로 정렬되서 잘 나오거든요..
그래서 배열 처리해주는 부분이 잘못되었다고 생각해서 2차원 배열로 저장하나 했거든요.
근데 echo $result[0][0];하면 에러가 나는걸 보니 그냥 1차원 배열로 값을 $result에 저장하는 듯 하고...
왜 두번째 세번째 데이터는 배열에 못 넣은걸까요..ㅠㅠ
뭔가 될 듯 말듯해서 더 답답하네요..
(사실 php시작한지 3일밖에 안됬습니다..)
-
ehii
2015.06.30 11:44
if문 윗줄부분에
echo("<pre>");
print_r($result);echo("</pre>");
를 써서 어떻게 저장되어 있는지 확인해보세요.
for문이 도는 것으로 보아 sizeof($result)가 존재하고,
쿼리 및 그 결과 데이터를 변수($result)로 저장까지는 제대로 된 것 같습니다.
-
제노0248
2015.06.30 12:08
아... 방금 해결했습니다.
너무 기쁘네요ㅠㅠ
문제는 mysql_fetch_array였던것 같습니다.
mysql_fetch_array는 쿼리 결과의 첫번째 한줄만 가져와서 무조건 데이터의 첫번째만 나왔던것 같고
mysql_fetch_row를 이용했더니 정상적으로 다 불러왔습니다.
echo "<table>"; $result = mysql_query("SELECT * FROM quiz.prob1 ORDER BY solve_time asc"); $fields = mysql_num_fields($result); $number = 1; echo "<tr>"; echo "<td>순위</td><td>팀명</td><td>시간</td>"; echo "</tr>"; while($row = mysql_fetch_row($result)){ echo "<tr>"; echo "<td>$number</td>"; for($i=0; $i<$fields;$i++){ echo "<td>$row[$i]</td>"; } echo "</tr>"; $number++; } echo "</table>";
이렇게 코드를 썼습니다.
이제 각 값들을 중앙정렬해서 보여주기만 하면 되겠네요 ㅎㅎ
도움 주셔서 감사합니다!!
-
ehii
2015.06.30 12:19
해결하셨다니 다행입니다
뭔가 어색해서 다시 봤더니 &DB::getInstance() _fetch를 쓰신게 아니고 mysql_fetch_array를 쓰셨군요.
-
제노0248
2015.06.30 13:50
네 이제 막 php를 시작한 입자이라
인스턴스를 가져온다는게 무슨 의미인지 잘 모르겠더라구요.
그래서 쓰고있던 mysql_fetch_array를 썼는데 이게 DB에서 한줄만 가져오게 되더라구요.
그래서 mysql_fetch_row를 써서 열단위로 가져오게 했더니 잘 됬습니다.
요 부분이 문제 해결의 핵심이었던것 같네요 ^^
php파일이 XE의 외부페이지로 연결되어 있다면
이런식으로 직접 쿼리를 날려서 DB의 data를 가져올 수 있습니다.
질문 내용을 정리하면
1. 일단 DB에 nick_name, time 필드가 있고 data가 저장되어 있다.
2. time필드를 오름차순으로 정렬하여 table로 보여주고 싶다.
3. 5명이 되면 --> 이부분은 무슨 말인지 모르겠네요. php소스상으로는 5명마다 끊어서 줄바꿈한다는 것 같은데 아래 테이블에는 팀명이 나오고(??)
DB스키마가 xe이고 DB테이블명이 xe_table이라 가정하고 아래와 같이 작성할 수 있습니다.