SQL 구문 부탁드립니다... 정보
SQL 구문 부탁드립니다...본문
지금 제가 하고 있는 작업은...
기존의 포인트 역경매를 순경매(?)로 작업해서 영카트에 붙이는 작업입니다.
작업은 어느 정도 다 마쳤는데, 입찰한 내역을 MyPage에서 보여주는 부분이 잘 안되어서 도움을 구하고자 합니다.
제가 뿌려주고 싶은 내용은 다음과 같습니다.
상품코드 | 상품명 | 입찰금액 | 낙찰가능한금액 | 경매종료일
상품 등록하는 테이블(yc4_item)의 해당 칼럼은 다음과 같습니다.
it_id : 상품 코드
it_name : 상품명
it_opt5 : 경매 종료일
입찰하는 테이블(yc4_bid : 새로 넣음)의 구조는 다음과 같습니다.
id : 시리얼(자동 증가)
it_id : yc4_item의 it_id와 동일한 값
it_mb_id : 회원 ID
bid_time : 입찰 시각
bid_money : 입찰금액
MyPage의 리스트에서
입찰금액은 자신이 입찰한 금액 중 가장 최신의 것만 나오면 되고(입찰한 것 전부 나와도 상관없습니다. 경쟁이 치열해서 여러 번 입찰하는 경우...),
낙찰가능한 금액은 yc4_bid 테이블에 해당 it_id로 등록된 값 중 최고값+1 이 나오면 되겠지요...
제가 생각했던 소스는 다음과 같습니다.
<?
$sql_bid = " select A.it_id,A.bid_money,max(bid_money),B.it_opt5,B.it_opt6,B.it_name from yc4_bid A,yc4_item B where A.it_mb_id = '$member[mb_id]' and A.it_id=B.it_id group by A.it_id order by A.it_id desc $limit";
$result_bid = sql_query($sql_bid);
for ($i=0; $row_bid=mysql_fetch_row($result_bid); $i++)
{
if ($i > 0)
echo "<tr><td colspan=5 height=1 background='$g4[shop_img_path]/dot_line.gif'></td></tr>\n";
echo "<tr height=28>\n";
echo "<td align=center><a href='./item.php?it_id=$row_bid[0]'><U>$row_bid[0]</U></a></td>\n";
echo "<td align=center>".substr($row_bid[5],0,30)."</td>\n";
echo "<td align=center>".number_format($row_bid[1])." 원</td>\n";
echo "<td align=center>".number_format($row_bid[2])." 원</td>\n";
echo "<td align=center>$row_bid[3]</td>\n";
echo "</tr>\n";
}
if ($i == 0)
echo "<tr><td colspan=5 height=100 align=center><span class=point>주문 내역이 없습니다.</span></td></tr>";
?>
이렇게 하면 모양은 대강 나오는데, 문제점이...
1. 입찰금액이 최초에 입찰한 금액이 나옵니다. 예를 들어서, 10000,20000,30000 이렇게 3번 입찰했으면 30000원이 나와야 되는데, 10000원이 나옵니다.
2. 낙찰가능한금액 부분에도 오류가 발생합니다. 예를 들어서 다른 사람이 40000을 입찰하였으면 40001원이 나와야 되는데, 제가 입찰한 최고액 30000원+1원=30001원이 나옵니다.
어떻게 하면 제가 원하는 데이터가 나올 수 있을까요...
많은 조건 부탁드립니다.
감사합니다.
기존의 포인트 역경매를 순경매(?)로 작업해서 영카트에 붙이는 작업입니다.
작업은 어느 정도 다 마쳤는데, 입찰한 내역을 MyPage에서 보여주는 부분이 잘 안되어서 도움을 구하고자 합니다.
제가 뿌려주고 싶은 내용은 다음과 같습니다.
상품코드 | 상품명 | 입찰금액 | 낙찰가능한금액 | 경매종료일
상품 등록하는 테이블(yc4_item)의 해당 칼럼은 다음과 같습니다.
it_id : 상품 코드
it_name : 상품명
it_opt5 : 경매 종료일
입찰하는 테이블(yc4_bid : 새로 넣음)의 구조는 다음과 같습니다.
id : 시리얼(자동 증가)
it_id : yc4_item의 it_id와 동일한 값
it_mb_id : 회원 ID
bid_time : 입찰 시각
bid_money : 입찰금액
MyPage의 리스트에서
입찰금액은 자신이 입찰한 금액 중 가장 최신의 것만 나오면 되고(입찰한 것 전부 나와도 상관없습니다. 경쟁이 치열해서 여러 번 입찰하는 경우...),
낙찰가능한 금액은 yc4_bid 테이블에 해당 it_id로 등록된 값 중 최고값+1 이 나오면 되겠지요...
제가 생각했던 소스는 다음과 같습니다.
<?
$sql_bid = " select A.it_id,A.bid_money,max(bid_money),B.it_opt5,B.it_opt6,B.it_name from yc4_bid A,yc4_item B where A.it_mb_id = '$member[mb_id]' and A.it_id=B.it_id group by A.it_id order by A.it_id desc $limit";
$result_bid = sql_query($sql_bid);
for ($i=0; $row_bid=mysql_fetch_row($result_bid); $i++)
{
if ($i > 0)
echo "<tr><td colspan=5 height=1 background='$g4[shop_img_path]/dot_line.gif'></td></tr>\n";
echo "<tr height=28>\n";
echo "<td align=center><a href='./item.php?it_id=$row_bid[0]'><U>$row_bid[0]</U></a></td>\n";
echo "<td align=center>".substr($row_bid[5],0,30)."</td>\n";
echo "<td align=center>".number_format($row_bid[1])." 원</td>\n";
echo "<td align=center>".number_format($row_bid[2])." 원</td>\n";
echo "<td align=center>$row_bid[3]</td>\n";
echo "</tr>\n";
}
if ($i == 0)
echo "<tr><td colspan=5 height=100 align=center><span class=point>주문 내역이 없습니다.</span></td></tr>";
?>
이렇게 하면 모양은 대강 나오는데, 문제점이...
1. 입찰금액이 최초에 입찰한 금액이 나옵니다. 예를 들어서, 10000,20000,30000 이렇게 3번 입찰했으면 30000원이 나와야 되는데, 10000원이 나옵니다.
2. 낙찰가능한금액 부분에도 오류가 발생합니다. 예를 들어서 다른 사람이 40000을 입찰하였으면 40001원이 나와야 되는데, 제가 입찰한 최고액 30000원+1원=30001원이 나옵니다.
어떻게 하면 제가 원하는 데이터가 나올 수 있을까요...
많은 조건 부탁드립니다.
감사합니다.
댓글 전체

첫번째 부분은 정렬하는 키값이 시리얼로 하셔야 하는데, 동일한 상품코드값으로 정렬하니 제대로 order하지 못하는 문제이구요.
$sql_bid = " select A.it_id,A.bid_money,max(bid_money),B.it_opt5,B.it_opt6,B.it_name from yc4_bid A,yc4_item B where A.it_mb_id = '$member[mb_id]' and A.it_id=B.it_id group by A.it_id order by A.id desc $limit";
두번째 문제는 현재 sql문은 자기자신이 bid한 값중에서 최대값 골라오는 것이기 때문에 당연히 자기가 입찰한 최고액+1원만 나오겠죠.
해당하는 상품코드의 최고입찰가격 뽑는 sql문 한번 더 돌리세요.
$sql_bid = " select A.it_id,A.bid_money,max(bid_money),B.it_opt5,B.it_opt6,B.it_name from yc4_bid A,yc4_item B where A.it_mb_id = '$member[mb_id]' and A.it_id=B.it_id group by A.it_id order by A.id desc $limit";
두번째 문제는 현재 sql문은 자기자신이 bid한 값중에서 최대값 골라오는 것이기 때문에 당연히 자기가 입찰한 최고액+1원만 나오겠죠.
해당하는 상품코드의 최고입찰가격 뽑는 sql문 한번 더 돌리세요.
입찰 내역 중에서 10개만 뽑아오는 부분입니다. 아직 다 완성된 것은 아닙니다...
$h_it_opt6 : 즉시구매 가격
<? $sql_itemb = " select * from yc4_bid where it_id = '$it_id' order by bid_money desc,id asc limit 10";
$result_itemb = sql_query($sql_itemb);
for ($i=0; $row_itemb = sql_fetch_array($result_itemb); $i++) { ?>
<tr>
<td style="padding:0 10px;" height="25" align="center"><?=number_format($row_itemb[bid_money])?> 원</td>
<td bgcolor="#e4e4e4" width="1"></td>
<td align="center"><?=$row_itemb[it_mb_id]?></td>
<td bgcolor="#e4e4e4" width="1"></td>
<td align="center"><?=$row_itemb[bid_time]?></td>
<td bgcolor="#e4e4e4" width="1"></td>
<? if($row_itemb[bid_money] == $h_it_opt6){ ?>
<td align="center" bgcolor="#ffe6e6">낙찰</td>
<? } else if($i == 0){ ?>
<td align="center" bgcolor="#eee6e6">낙찰대기 중</td>
<? } else { ?>
<td align="center">입찰 완료</td>
<? } ?>
</tr>
<tr><td colspan=7 bgcolor="#e4e4e4" width="1"></td></tr>
<? } ?>
감사합니다.
$h_it_opt6 : 즉시구매 가격
<? $sql_itemb = " select * from yc4_bid where it_id = '$it_id' order by bid_money desc,id asc limit 10";
$result_itemb = sql_query($sql_itemb);
for ($i=0; $row_itemb = sql_fetch_array($result_itemb); $i++) { ?>
<tr>
<td style="padding:0 10px;" height="25" align="center"><?=number_format($row_itemb[bid_money])?> 원</td>
<td bgcolor="#e4e4e4" width="1"></td>
<td align="center"><?=$row_itemb[it_mb_id]?></td>
<td bgcolor="#e4e4e4" width="1"></td>
<td align="center"><?=$row_itemb[bid_time]?></td>
<td bgcolor="#e4e4e4" width="1"></td>
<? if($row_itemb[bid_money] == $h_it_opt6){ ?>
<td align="center" bgcolor="#ffe6e6">낙찰</td>
<? } else if($i == 0){ ?>
<td align="center" bgcolor="#eee6e6">낙찰대기 중</td>
<? } else { ?>
<td align="center">입찰 완료</td>
<? } ?>
</tr>
<tr><td colspan=7 bgcolor="#e4e4e4" width="1"></td></tr>
<? } ?>
감사합니다.