이전 목록 다음
채택완료

php sql호출 관련 질문입니다 ㅠ

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

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

 

2041240632_1645680348.9045.png

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

Copy
<?
$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>

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

2041240632_1645681111.1023.png

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

Copy
<?
$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 합치고 중복제외 나열

$name_sql = "SELECT * FROM g5_write_color";
$name_group =sql_query($name_sql);

?>

<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>

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

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

 

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

 

아래는 현재 상황입니다 ㅠ

2041240632_1645681122.4557.png

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

|

답변 3개 / 댓글 7개

채택된 답변
+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개

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개

아아 네네 해당 부분 고쳤어요 ㅠ
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'];
}
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++) { ?>

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

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

1890394026_1645681407.9608.png

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

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

Copy
<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>

답변에 대한 댓글 1개

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

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

답변감사합니다..

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

🐛 버그신고