2011-09-28 7 views
-1

아래는 내가 지금까지 가지고있는 것에 대한 첨부 된 이미지입니다. 1 = 특징 및 2 = 이점.MySQL 쿼리 도움말 및 PHP로 출력

내가해야 할 일은이 기능을 혜택과 일치시키는 것입니다. 첫 번째 # 1은 지금까지 인 것을 처음 # 2

enter image description here

로 간다 :

<?php 
if ($result = $mysqli->query('SELECT FB_TEXT FROM `FB_DATA` WHERE `FB_MODELID` = "'.$sku_modelid.'" AND FB_TYPEID IN (1,2)')) { 

    while($row = $result->fetch_assoc()){ 
     echo "<tr><td>".$row['FB_TEXT']."</td></tr>"; 
    } 

} 
?> 

지금이 모든 결과를 보여줍니다. 일어날 필요가있는 것은 다음과 같습니다.

<tr> 
    <td>Feature</td> 
    <td>Benefit</td> 
</tr> 

아무도 내가 어떻게 그런 일을 할 수 있는지 알고 있습니까?

+1

어떻게 당신이 첫 번째 인 알 수 있습니까? – Pentium10

+0

당신은 내가 정말로 잘 모르고 있다는 것을 알고 있습니다.방금 모델 ID에 대한 검색을 수행했는데 그 결과는 완벽하게 일치합니다. – Drew

+0

주문 ID가 필요하며 아래 첫 번째 주문을 확인하십시오. – Pentium10

답변

2

이것이 올바르게 수행 될 수있는 방법은 없습니다. 대신 별도의 테이블을 사용하고 인덱스와 고유 식별자를 사용하여 2를 서로 연결해야합니다.

기능과 이점이 항상 함께 사용되는 경우 다른 열을 추가 할 수도 있습니다.

이 테이블은 4 열을 가진 만들 것

:

  • 기능 (독특한)

    1. ID를
    2. 혜택
    3. 이이 작업을 수행 할 수있는 매우 위험한 방법입니다
  • 0

    텍스트 .

    기술적으로 SQL에는 "주문"개념이 없습니다. 네, 실제로 모든 물건을 주문할 때까지 물건을 주문하지만, 은 그들이 예상 된 순서대로 나올 것을 보장하지 않습니다..

    당신은 두 개의 테이블, "혜택"기능 "에 대한 하나 하나를 만드는 것이 가장 좋은 선택이 될 것입니다. 나는 다른 사람들이 무엇인지 모르는 그런 다음 외래 키로 가입 할 수 있습니다.

    SELECT * FROM features JOIN benefits ON features.link_id = benefits.link_id WHERE features.model_id = 1 
    
    1

    을 당신이 FB_TYPEID1을 때이 기능 간주됩니다 알고 FB_TYPEID2을 때,이 혜택을 고려하면 약하지만, 다음 순서는 쉽게

    사용이 쿼리 :.

    SELECT 
        `FB_TYPEID`, 
        `FB_TEXT` 
    FROM 
        `FB_DATA` 
    WHERE 
        `FB_MODELID` = theModelIdYouAreLookingFor AND 
        `FB_TYPEID` IN (1,2) 
    ORDER BY 
        CASE `FB_TYPEID` 
         WHEN 1 THEN 0 
         WHEN 2 THEN 1 
         # switch this to: 
         # WHEN 2 THEN 0 
         # WHEN 1 THEN 1 
         # if you want benefit to show first 
        END 
    

    SQL injection으로부터 자신을 보호해야합니다. mysqli으로 쿼리하는 방식은 SQL 인젝션에 취약합니다 (이전에 $sku_modelid이 소독되지 않았다고 가정). 바인딩 된 매개 변수가있는 준비된 문을 실제로 사용해야합니다. 같은 뭔가 :

    $sql = ' 
        SELECT 
         `FB_TYPEID`, 
         `FB_TEXT` 
        FROM 
         `FB_DATA` 
        WHERE 
         `FB_MODELID` = ? AND 
         `FB_TYPEID` IN (1,2) 
        ORDER BY 
         CASE `FB_TYPEID` 
          WHEN 1 THEN 0 
          WHEN 2 THEN 1 
         END 
    '; 
    if($statement = $mysqli->prepare($sql)) 
    { 
        // bind $sku_modelid to the first (and only) questionmark (placeholder) as an integer 
        $statement->bind_param('i', $sku_modelid); 
    
        // execute the prepared statement 
        if($statement->execute()) 
        { 
         // bind FB_TYPEID to $typeId and FB_TEXT to $text 
         $statement->bind_result($typeId, $text); 
         while($row = $result->fetch_assoc()) 
         { 
          // echo the table row 
          if($typeId == 1) echo '<tr>'; 
          echo '<td>' . $text . '</td>'; 
          if($typeId == 2) echo '</tr>'; 
         } 
        } 
    } 
    

    (필자는 mysqli 라이브러리를 사용하지 않습니다하지만 그것은 작동합니다 생각으로, 여기에 뭔가가 될 수 있습니다..)

    +0

    고맙습니다. 도움을 주셔서 감사합니다. 내가 제대로 작동하지 않을 것 같습니다. 그것은 기능 기능을 기능를 출력 - 한 지점에서 두 개의 TDS를 제공합니다. 여기에 미리보기가 http://imageshack.us/photo/my-images/714/previewpe.jpg/ – Drew

    +0

    만 나는 기능 기능 기능 혜택와 HTML 테이블을 만들 수 있다면 beneft 이익 그러면 훨씬 더 쉬울 것입니다. – Drew

    +0

    @Drew : 오, 잠깐, 다른 사람들이 지금 무엇을 보았는지 알 겠어. FB_MODELID 당 하나의 장점과 기능 만있을 것이라고 생각했습니다. 바보 나. 이 경우, 그들은 당연히 어떤 기능이 어떤 이점과 쌍을 이루어야하는지 구분할 수 없습니다. 나는 당신이 참으로 데이터베이스 설계를 다시 생각할 필요가 있다고 생각한다. –