php - 在多个表中搜索记录并在 mysql 和 php 中以不同的方式打印输出

标签 php mysql sql-server database

我的数据库中有四个表。 TABLE1 有 5 列,TABLE2 有 7 列,TABLE3 有 9 列,TABLE4 有 11 列。

所有 4 个表都有一个列 PID,我想从中进行用户查询。即

SELECT pid FROM ....

我面临的问题是,如何从所有 4 个表中进行选择,如果在 TABLE1 中找不到我的查询,则在 TABLE2 中搜索,依此类推.

由于所有表都有不同的结构,因此结果必须以不同的方式传递给输出,例如,如果在 TABLE1 中找到查询,则输出将具有一个包含 5 列的表,或者如果来自 TABLE4 输出将显示 11 列。

目前,我只能查询 1 个表。

<h2>title</h2>
            <div class="panel panel-primary">
            <div class="panel-heading">SELECT NAME FROM LIST</div>
            <div class="panel-body">
            <form name="dropdown" action="http://search.php" method="post">
            <select class="form-control" data-style="btn-primary" name="p_ID">
<?php
//provide your hostname, username and dbname
$host="localhost"; 
$username="root";  
$password="";
$db_name="mydb"; 
$con=mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name");

$sql = "select PID from TABLE1";
$result = mysql_query($sql);
while($row=mysql_fetch_array($result))
{
echo "<option value=$row[PID]>$row[PID]</option>";
}
?>

    </select><br><br>
            <button class="btn btn-primary center-block btn-lg" type="submit" >Search</button>
                </form> 

            </div>
        </div>
    </div>

这是来自输出表的 Search.php

<?php   

//provide your hostname, username and dbname
$DB_HOST = 'localhost';
$DB_USER = 'root';
$DB_PASS = '';
$DB_NAME = 'mydb';
$mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if(!$mysqli) 
{
    echo 'Could not connect to the database.';
} 
else 
{
if(isset($_POST[PID]) )
{
//echo "Input by list<br>";

$query = "select * from TABLE1 where PID like '$_POST[PID]%' ";
$result = $mysqli->query($query) or die($mysqli->error.__LINE__);
    //$arr = array();
    if($result->num_rows <= 1) 
    {
    echo "<table class=\"table\" ><tr><th>Protein ID:</th>";
        while($row = $result->fetch_assoc()) 
        {
        echo "<td>$row[PID]</td><tr><th>Protein Domain:</th><td>$row[p_name]</td></tr>
        <tr><th>Interacting Proteins:</th><td>";
        $seqsplit1 = wordwrap($row[p_symbol_orf], 60, "-\n", true);
        echo "$seqsplit1</td>";

        echo "</tr><tr><th>Protein Sequence:</th><td><div>";
        $seqsplit = wordwrap($row[p_sequence], 60, "\n", true);
        echo ">$row[p_ts]<br>$seqsplit";
        echo "</div></td></tr><tr><th>Protein Length:</th><td>$row[p_length]</td></tr><tr><td colspan='2'>";

        }
        ?>          

<?php       

    echo "</td></tr></tbody></table>";
    }
    else
    {
        echo "No query found, please search next!";
    }
} 

这些是下表的结构

TABLE1
PID PNAME PSYMBOL PSEQ PLEN

TABLE2
PID PNAME1 PSYMBOL1 PNAME2 PSYMBOL2  PSEQ PLEN

TABLE3
PID PNAME1 PSYMBOL1 PNAME2 PSYMBOL2 PNAME3 PSYMBOL3 PSEQ PLEN

TABLE4
PID PNAME1 PSYMBOL1 PNAME2 PSYMBOL2 PNAME3 PSYMBOL3 PNAME4 PSYMBOL4 PSEQ PLEN

最佳答案

$query = "select * from TABLE1 where PID like '$_POST[PID]%'  ";
$result = $mysqli->query($query) or die($mysqli->error.__LINE__);
if($result->num_rows == 0){
    $query = "select * from TABLE2 where PID like '$_POST[PID]%'  ";
    $result = $mysqli->query($query) or die($mysqli->error.__LINE__);
}else if($result->num_rows == 0){
    $query = "select * from TABLE3 where PID like '$_POST[PID]%'  ";
    $result = $mysqli->query($query) or die($mysqli->error.__LINE__);
}else if($result->num_rows == 0){
    $query = "select * from TABLE4 where PID like '$_POST[PID]%'  ";
    $result = $mysqli->query($query) or die($mysqli->error.__LINE__);
}else if($result->num_rows == 0){
    $query = "select * from TABLE5 where PID like '$_POST[PID]%'  ";
    $result = $mysqli->query($query) or die($mysqli->error.__LINE__);
}

要处理表列计数冲突,应使用 foreach 语句

if($result->num_rows <= 1)    
   while($row = $result->fetch_assoc())
       foreach ($row as $r1=>$r){
           echo $r1.": ".$r."<br/>"; ...
       }

关于php - 在多个表中搜索记录并在 mysql 和 php 中以不同的方式打印输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32884535/

相关文章:

sql - 将字符串拆分为两列

php - 在 Laravel 中从数据库中检索和显示单个记录

php - 在 PHP 中使用 POST 方法时存储最后输入的文本

PHP Loop Detect First Instance of each Letter of MySQL 结果

javascript - 单页结账未继续下一步

sql-server - 在 SQL 中将数字提高到分数幂

mysql - 连接 2 个结果集以替换列中的值

mysql - 哪个应该主动回滚任务,App 还是 DB?

java - 无法构建 Hibernate SessionFactory,由 : org. hibernate.AnnotationException 引起:

sql-server - 当我的 SQL Server 数据库设置为 Latin1_General_100_CI_AI 时出现大小写和排序规则问题