2013-10-10 2 views
1

안녕하세요, 웹 사이트에 대한 메뉴를 작성하는 것은 여러 국가에서 내 국가를 기반으로하며 각 주마다 많은 도시가 있습니다.mysqli 쿼리 내에서 행을 2 행으로 나누십시오.

코드에서 모든 것이 훌륭하게 작동합니다. 그러나 하나의 상태에서 2 개의 상태 (예 : "상태 1 AL")와 "상태 1 M - Z"로 "나누기"묻습니다.

내 첫 번째 생각은 DB에 두 개의 상태를 작성하는 것이므로 둘 다 생성하는 것처럼 간단합니다. 하지만 모든 사이트에서 1 대신 2 개의 상태를 유지해야합니다.

그래서 나는 이것을 할 방법이 있어야한다고 생각한다. 그렇지 않다면, 나는 HTML 메뉴를해야만한다. 수동으로 업데이트하면된다. 쿼리를 기반으로 메뉴가 자동 업데이트 된 경우 더 좋을 것입니다 ...

여기 내 코드 및 쿼리입니다 : 상태의 순서는 필요한 2 열 메뉴를 얻는 것입니다. 그러나 어떻게 국가를 "나눕니다"또는 "나눠서"두 가지로 만들 수 있습니까?

<?php 
$result = mysqli_query($con ,"SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'"); 


$result = mysqli_query($con,"SELECT * FROM table_states WHERE ccode='MX' Order by find_in_set(scode, '01,17,02,18,03,19,04,20,05,21,06,22,07,23,08,24,09,25,10,26,11,27,12,28,13,29,14,30,15,31,33,32,16')"); 
while($row = mysqli_fetch_array($result)) 
{?> 

<li class="menuin<?php echo $row['sname'];?>"><a class="st" href="javascript:void(0);"><?php echo $row['sname'];?></a> 
    <ul class="ulCityDN<?php echo $row['sname'];?>" id="menusub<?php echo $row['sname'];?>"> 
     <?php $resultSub = mysqli_query($con,"SELECT * FROM `table_cities` where ccode='$row[ccode]' and scode='$row[scode]' limit 0,30"); 
     //echo "SELECT * FROM `table_cities` where ccode='$row[ccode]' and scode='$row[scode]' limit 0,30"; 
     while($rowSub = mysqli_fetch_array($resultSub)){ 
     ?> 
     <li><a href="index.php?page=location/change-city/<?php echo $rowSub['id'];?>&<?php echo $row['scode'];?>&city=<?php echo $rowSub['city'];?>"><?php echo $rowSub['city'];?></a></li> 
     <?php }?> 
    </ul> 
</li> 

<?php } 
?> 
</ul> 
</div> 
</div> 
</div> 
<?php }?> 
+1

이것은 좋은 질문입니다. 데이터베이스를 변경하지 않고도 쉽게 해결할 수 없습니다. 'UNION' 쿼리를 사용하여 두 상태를 첫 번째 결과로 가져올 수 있습니다. 그러나 도시들은 모두 같은 주를 언급하고 있습니다. 따라서 도시의 ccode 나 scode를 변경하거나 쿼리에서'CASE' WHEN을 많이 사용해야합니다. – bitWorking

+0

좋아, 노조 부분이 아주 재미있을 것 같네요, 당신이 언급 두 번째 문제는, 내가 첫 번째 상태 나누기 알 알았어, 그래서 거기에 당신과 도시 만이 "첫 번째 조각에 있어야" 그, 그냥 내가 노조에 대해 아무것도 몰라 –

답변

1

게시 한 첫 번째 검색어는 UNION 일 수 있습니다. 다음과 같이 될 수 있습니다.

(
    SELECT 
    (
     CASE WHEN sname = 'State 1' THEN 'State 1 A-L' 
     ELSE sname 
     END 
    ) AS sname, 
    ccode, 
    scode 
    FROM table_states 
    WHERE ccode='MX' 
) 
UNION 
(
    SELECT 
    'State 1 M-Z' AS sname, 
    '01' AS ccode, /* ccode from State 1 */ 
    '02' AS scode /* scode from State 1 */ 
) 
Order by find_in_set(scode, '01,17,02,18,03,19,04,20,05,21,06,22,07,23,08,24,09,25,10,26,11,27,12,28,13,29,14,30,15,31,33,32,16') 

나는 CASE/WHEN을 테스트하지 않았습니다. 그러나 State 1에서 State 1 A-L으로 이름을 변경해야합니다. 두 번째 쿼리는 하드 코드 된 값만 반환합니다. 그리고 여기서 다른 코드를 하드 코드하거나 State 1 M-Z에 대한 코드를 지정할 수 있습니다. 그런 다음 도시의 데이터베이스에서이를 변경해야합니다.

또 다른 아이디어는 PHP에서 도시의 조건을하는 것입니다 :

if ($row['sname'] == 'State 1 A-L') { 
    $sql = " 
     SELECT * FROM `table_cities` 
     where ccode='$row[ccode]' 
     and scode='$row[scode]' 
     AND city < 'M' limit 0,30"; 
} 
else if ($row['sname'] == 'State 1 M-Z') { 
    $sql = " 
     SELECT * FROM `table_cities` 
     where ccode='$row[ccode]' 
     and scode='$row[scode]' 
     AND city > 'L' limit 0,30"; 
} 
else { 
    $sql = " 
     SELECT * FROM `table_cities` 
     where ccode='$row[ccode]' 
     and scode='$row[scode]' limit 0,30"; 
} 
+0

와우, 난 그냥 이걸보고, 바로 시험해보고 싶어, 고마워 !!! –

0

왜 당신 table_cities 쿼리에 city로 불과 위해? 그런 다음 도시 이름이 특정 문자로 시작하는지 여부에 대한 간단한 점검을 수행 할 수 있습니다. 일단 그 편지를 전달하면, 현재의 하위 메뉴를 종료하고 새로운 하위 메뉴로 글쓰기를 시작하십시오.

table_cities 검색어에 table_states을 가입시키고 상태별로 먼저 주문하면 모든 질문을 단일 검색어로 처리 할 수 ​​있습니다. 앞에서 설명한 동일한 기술은 상태를 반복하면서 현재 메뉴를 종료하고 새 상태를 찾을 때마다 새 메뉴를 시작하기 위해 작동합니다.

+0

글쎄, 왜냐하면 나는 2 열이 디자이너와 클라이언트에 의해 설정된 순서와 일치하지 않기 때문에 .. 왜 내가이 아이디어에 (첫 번째 모델 이었는지) 바뀐다. .. 내가 또한 "나눌 필요가있다. "두 상태로 하나의 상태지만, 쿼리 .... .... 왜냐하면 사이트"카테고리 ","뉴스 ""포럼 "모든 콘텐츠, 내게 단지 하나의 상태 (메뉴에서 나뉘어 상태)해야합니다 .. –

관련 문제