2013-10-04 3 views
-2

편집 : 상황에 대한 몇 가지 현재 코드를 포함하도록 업데이트, 여기에 굵은데이터베이스의 모든 테이블을 검색하는 방법은 무엇입니까?

신참에 질문을 추가 :

나는 각 부품의 15,000-100,000 행 가득 제조업체의 20 개 정도 테이블이됩니다 표. PartNumber, Superceding Part Number, List Price, MFG Price, Sale Price 등과 같은 정보는 컬럼으로 저장됩니다. 검색 상자에 부품 번호를 입력하고 지금까지 번호와 일치하는 모든 부품을 표시 한 다음 더 많은 부품 번호를 입력 할 때 부품 번호를 업데이트 할 수 있기를 바랍니다.

나는 현재 '0000'과 같이 몇 개의 숫자를 입력하면 1 000011, 00001300015000023과 같이 0000으로 시작하는 상위 5 개 부분을 반환합니다. , 000025 및 이에 대한 일부 정보가 포함되어 있습니다. 내가 하나 더 번호 '00002'를 입력하면 000023과 000025 만 표시됩니다. 그러나 어떤 제조업체가 그 부품을 제조했는지 알지 못할 경우를 대비하여이 검색을 데이터베이스의 모든 테이블에서 실행하고 싶습니다.

현재 나는 ariens_prices와 briggs_prices라는 두 개의 테이블이있는 taft_test1이라는 데이터베이스를 가지고 있습니다. 각 테이블에는 동일한 열이 포함되지만 모든 항목의 데이터로 채워지지 않을 수도 있습니다.

이 문제를 해결하는 가장 좋은 방법에 대한 아이디어가 있습니까?

일부 사용자는 UNION을 언급했으나 20 개 이상의 노조를 사용해야합니까? 아니면 데이터베이스를 레이아웃하는 더 좋은 방법이 있을까요?

감사합니다. 내가 작업 한

샘플 코드 :

partslookup.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 

<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 

    <title>Taft Power Equipment</title> 

    <script type="text/javascript" language="Javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
    <script src="js/jquery.horizontalNav.js"></script> 

    <script> 
    // When document is ready... 
     $(document).ready(function() { 

      $('.full-width').horizontalNav({}); // Call horizontalNav on the navigations wrapping element 
     }); 
    </script> 


    <script> 
     function showUser(str) 
     { 
      if (str=="") 
       { 
       document.getElementById("txtHint").innerHTML=""; 
       return; 
       } 
       if (window.XMLHttpRequest) 
        {// code for IE7+, Firefox, Chrome, Opera, Safari 
        xmlhttp=new XMLHttpRequest(); 
        } 
       else 
        {// code for IE6, IE5 
         xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
         } 
        xmlhttp.onreadystatechange=function() 
         { 
         if (xmlhttp.readyState==4 && xmlhttp.status==200) 
         { 
         document.getElementById("txtHint").innerHTML=xmlhttp.responseText; 
         } 
         } 
        xmlhttp.open("GET","livesearch.php?q="+str,true); 
        xmlhttp.send(); 
     } 
    </script> 


    <link rel="stylesheet" type="text/css" href="style.css" /> 
    <!--[if lt IE 7]> 
     <link rel="stylesheet" type="text/css" href="style-ie.css" /> 
    <![endif]--> 
</head> 
<body> 
    <div id="page-wrap"> 
     <div id="inside"> 

      <div id="header"> 
       <a href="file:///C:/Users/ryan/Desktop/websites/ryan%20website/index.html"><img src="images/TaftLogo2.png" alt="header" /></a> 
      </div> 

      <div id="menu"> 
       <nav class="horizontal-nav full-width horizontalNav-notprocessed"> 
        <ul> 
         <li><a href="index.html">Home</a></li> 
         <li><a href="#">Work</a></li> 
         <li><a href="#">Blog</a></li> 
         <li><a href="#">About</a></li> 
         <li><a href="#">Contact</a></li> 
         <li><a href="partslookup.php">Parts Look Up</a></li> 
        </ul> 
       </nav> 
      </div> 

      <div id="main-content">  

       <input id="test" class="auto" type="text" size="25" placeholder="Enter Part Here" onkeyup="showUser(this.value)"   
       <br><br><br> 
       <div id="txtHint"><b>Part info will display here.</b></div>   
       <br><br><br><br>  

      </div> 

      <div style="clear: both;"></div> 

      <div id="footer"> 
       <p>&copy Copy Right Taft Power Equipment Corp</p> 
      </div> 
    </div> 

</body> 

</html> 

livesearch.php

<?php 

$q = $_GET['q']; 

echo "Part Entered:  $q <br><br>"; 


$dbhost = 'localhost:3306'; 
$dbuser = 'root'; 
$dbpass = 'password'; 
$conn = mysql_connect($dbhost, $dbuser, $dbpass); 
if(! $conn) 
{ 
    die('Could not connect: ' . mysql_error()); 
} 
$sql = "SELECT * FROM `briggs_prices` WHERE briggs_prices.Description LIKE '$q%' 
     UNION 
     SELECT * FROM `ariens_prices` WHERE ariens_prices.Description LIKE '$q%' 
     LIMIT 0, 50 "; 

mysql_select_db('taft_test1'); 
$retval = mysql_query($sql, $conn); 
if(! $retval) 
{ 
    die('Could not get data: ' . mysql_error()); 
} 

echo "<table border='1'> 
<tr> 
<th>Part#</th> 
<th>Description</th> 
<th>Price</th> 
</tr>"; 
while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) 
{ 
    echo "<tr>"; 
    echo "<tr>"; 
    echo "<td>" . $row['Description'] . "</td>"; 
    echo "<td>" . $row['SuperNum'] . "</td>"; 
    echo "<td>" . $row['LIST1'] . "</td>"; 
    echo "</tr>"; 
} 
echo "</table>"; 




while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) 
{ 
    echo "Part# :{$row['Description']} ". 
     "Desc : {$row['SuperNum']} ". 
     "Cost : {$row['LIST1']} ". 
     "--------------------------------<br>"; 
} 
//echo "Fetched data successfully\n"; 
mysql_close($conn); 
?> 
+1

모든 제조업체를 하나의 테이블에 추가하십시오. – sskoko

+0

쿼리에서 'union'을 사용할 수 있습니다. – bansi

+1

올바르게 이해하면 제조업체의 브랜드 만 구별되는 20 개의 동일한 테이블이 있습니까? 새로운 것을 추가해야한다면? 더 많은 테이블을 생성합니까? 소리 정말 내게 결함이 ... 어쩌면 나는 데이터베이스 디자인의 적절한 이해와 함께 시작 하겠어 .... – walther

답변

1

더 나은 데이터베이스 레이아웃이 필요합니다. 예 :

(P) means Primary Key 
(F) means Foreign Key 
(I) means Indexed 

manufacturers 
    id     unsigned int(P) 
    name    varchar(50) 
    ... 

+----+--------+-----+ 
| id | name | ... | 
+----+--------+-----+ 
| 1 | Ariens | ... | 
| 2 | Briggs | ... | 
| .. | ...... | ... | 
+----+--------+-----+ 

parts 
    id      unsigned int(P) 
    number     char(50)(I) 
    manufacturer_id   unsigned int(F manufacturers.id) 
    name     varchar(75) 
    superceding_part_id  unsigned int(F parts.id) // Allow NULL 
    list_price    double 
    manufacturer_price  double 
    sale_price    double 
    ... 

+----+--------+-----------------+----------+---------------------+------------+--------------------+------------+-----+ 
| id | number | manufacturer_id | name  | superceding_part_id | list_price | manufacturer_price | sale_price | ... | 
+----+--------+-----------------+----------+---------------------+------------+--------------------+------------+-----+ 
| 1 | 000011 |    1 | Widget A | NULL    |  1.00 |    .50 |  .90 | ... | 
| 2 | 000012 |    1 | Widget B |     1 |  2.00 |    .75 |  1.75 | ... | 
| 3 | 000013 |    2 | Widget A | NULL    |  1.15 |    .70 |  1.00 | ... | 
| .. | ...... | ............... | ........ | ................... | .......... | .................. | .......... | ... | 
+----+--------+-----------------+----------+---------------------+------------+--------------------+------------+-----+ 
+0

이것은 매우 유용했습니다. 필자는 데이터베이스 스키마를 연구하고 여정에서 이와 같은 것으로 시작할 것입니다. 고맙습니다. – JavaNinja

1

$part 당신이 입력하는 변수입니다. 여기에 쿼리가 있습니다

$query = 'SELECT TOP 5 PartNumber FROM yourTable WHERE PartNumber LIKE "'.$part.'%"' 
+0

OP가이 부분을 실행하고있어 여러 테이블에서 결과를 얻고 싶습니다. – bansi

0

모든 테이블에 같은 열이 있다면, 더 나은 UNION을 사용하여 단일 쿼리에서 행을 얻으십시오. 시도해보십시오

WHERE `PartNumber` LIKE "0001%" 
관련 문제