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

php sql호출 관련 질문입니다 ㅠ 채택완료

바트컨트롤 3년 전 조회 1,882

그누분들이 어제 도와주셔서.. 앞단위는 해결했으나..

뒤에 또 난관에 봉착을 해버렸어요...

 

윗 부분은 아래 코드로 해결했으나..

</p>

<p><?

$color_group_union = "

SELECT distinct color1 FROM g5_write_color where color1 != ''

UNION

SELECT distinct color1 FROM g5_write_color where color1 != ''

UNION

SELECT distinct color2 FROM g5_write_color where color2 != ''

UNION

SELECT distinct color3 FROM g5_write_color where color3 != ''

"

$color_group = union_sql_query($color_group_union); // color1~4 합치고 중복제외 나열

?>

<div class="color_wrap">

    <?php for($i=0; $row_color=sql_fetch_array($color_group); $i++) {  ?>

        <div><?php echo $row_color['color1']?></div>

    <? } ?>

</div>    

 </p>

<p>

이제 아래 이미지 처럼 뽑으려 하니(결론이미지, 희망)

문제가 많이 발생하드라구요

</p>

<p><?

$color_group_union = "

SELECT distinct color1 FROM g5_write_color where color1 != ''

UNION

SELECT distinct color1 FROM g5_write_color where color1 != ''

UNION

SELECT distinct color2 FROM g5_write_color where color2 != ''

UNION

SELECT distinct color3 FROM g5_write_color where color3 != ''

"

$color_group = union_sql_query($color_group_union); // color1~4 합치고 중복제외 나열</p>

<p>$name_sql = "SELECT * FROM g5_write_color";

$name_group =sql_query($name_sql);</p>

<p>?></p>

<p><div class="color_wrap">

    <?php for($i=0; $row_color=sql_fetch_array($color_group); $i++) {  ?>

        <div>

            <h1><?php echo $row_color['color1']?>

            <ul>

                 <?php for($i=0; $row_name=sql_fetch_array($name_group); $i++) {  ?>

                     <?php if($row_name['color1']==$row_color['color1']){ ?>

                        <li><?php echo $row_name['name']?></li>

                    <? } ?>

                 <? } ?>

            </ul>

        </div>

    <? } ?>

</div>    

 </p>

<p>

1. if절에서 첫째 for문의 color1(union된 값)과 둘째 for문의 color1을 비교할 때

둘째 for문은 union이 아니기때문에 첫째 필드값만 조사, 또 union을 써야하나요..?ㅠ

 

2. 첫째 for문은 돌아가는데 둘째 for문에서 한번돌 고 끝나버리드라구요..

 

아래는 현재 상황입니다 ㅠ

작은 조언이라도 ㅠ 감사하겟습니다..

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

답변 3개

채택된 답변
+20 포인트

참고로 이렇게 나옵니다.

MariaDB > select distinct 'aa' aa, bo_subject from g5_board; +----+-----------------+ | aa | bo_subject      | +----+-----------------+ | aa | 공지사항        | | aa | 자유게시판      | | aa | 갤러리          | +----+-----------------+ 7 rows in set (0.00 sec)

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

답변에 대한 댓글 1개

바트컨트롤
3년 전
while($row_color=sql_fetch_array($color_list)){
$color_array[] = $row_color;
}

배열로 담아서 별개로 호출하여 해결 하였습니다.
감사합니다!

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

SELECT distinct color1 FROM g5_write_color where color1 != ''
UNION
SELECT distinct color1 FROM g5_write_color where color1 != ''
UNION
SELECT distinct color2 FROM g5_write_color where color2 != ''
UNION
SELECT distinct color3 FROM g5_write_color where color3 != ''
"

 

1,2,3,4를 쓰신 거 맞죠?

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

답변에 대한 댓글 5개

바트컨트롤
3년 전
아아 네네 해당 부분 고쳤어요 ㅠ
엑스엠엘
3년 전
loop는 한번만 있으면 됩니다.


$color_group_union = "
SELECT distinct 'red' color, name FROM g5_write_color where color1 != ''
UNION
SELECT distinct 'blue' color, name FROM g5_write_color where color2 != ''
UNION
SELECT distinct 'aaa' color, name FROM g5_write_color where color3 != ''
UNION
SELECT distinct 'bbbb' color, name FROM g5_write_color where color4 != ''
"
$color_group = union_sql_query($color_group_union); // color1~4 합치고 중복제외 나열
$name_sql = "SELECT * FROM g5_write_color";
$name_group =sql_query($name_sql);

...

$pre='';

for($i=0; $row_name=sql_fetch_array($name_group); $i++) {
if($row_name['color']!=$pre) echo $row['color'];
echo $row_name['name'];
$pre= $row['color'];
}
바트컨트롤
3년 전
1. $row['color']; 에서 $row는 어디서 나온거에요 ㅠ?

2. SELECT distinct 'red'는 레코드인건가요?

3. loop는 한번만 있으면 된다는게
<?php for($i=0; $row_color=sql_fetch_array($color_group); $i++) { ?>
<?php for($i=0; $row_name=sql_fetch_array($name_group); $i++) { ?>

이 두개 중 하나만 있으면 된다는 말씀이신건가요?
엑스엠엘
3년 전
$row_name이라서 써야 하는데 오타네요.

ssh나, phpmyadmin 등으로
해당 sql을 실행해서 결과를 보시는 것이 이해가 빠릅니다.
바트컨트롤
3년 전
넵!
많은 도움 감사합니다!

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

그누위즈

위 그림을 보시면 $i 가 바로 아래에서 다시 사용되기 때문에 루프가 중단됩니다.

다음과 같이 하단을 고치세요

</p>

<p><ul>

    <?php for($j=0; $row_name=sql_fetch_array($name_group); $j++) {  ?>

        <?php if($row_name['color1']==$row_color['color1']){ ?>

            <li><?php echo $row_name['name']?></li>

        <? } ?>

    <? } ?>

</ul></p>

<p>

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

답변에 대한 댓글 1개

바트컨트롤
3년 전
ㅜㅜ똑같이 한번만 도네요..
일반적 for 로 돌렸을 때는 되는데
-------
($j < 5) echo 'asd' 각 영역마다 asd가 다섯번씩 호출
-------

조건값에 $row_name=sql_fetch_array($name_group); 이렇게 넣으면
한번만 돌드라구요..

답변감사합니다..

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

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

로그인