根据一次搜索

时间:2016-12-12 13:28:22

标签: php html mysql

我在php脚本中查询mysql表时遇到问题。

我有这个HTML脚本:

<html>
<head>
<title>Human gene catalog</title>
</head>
<body>
<h1>Reference sequence and Gene Ontology catalog</h1>
<p>
<form action=prueba.php method=post>
<b>1.Select an organism:</b>
<br/>
<input type=radio name=organism value=1>Human
<input type=radio name=organism value=2>Mouse
<input type=radio name=organism value=3>Zebrafish
<input type=radio name=organism value=4>Fruit fly<br/>             
<b>1.Search for a gene:</b>
<br/>
<label>Please select a gene:</label>
<br/>
<input type=text name=gene>
<br/><br/>
<input type=submit name=submit value=Submit>
</form>
</p>
</html>

生成一个部分,您必须选择该部分,另一部分必须放置查询基因。

我有这个PHP脚本:

<?php
$gene = $_POST["gene"];

$enlace = mysqli_connect("localhost","root","*******","refGene");
if (mysqli_connect_errno())
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

mysqli_select_db($enlace,"refGene_human");
$result = mysqli_query($enlace,"select name,name2,chrom,exonCount from refGene_human where name2 like '%$gene%' order by name2");

echo "<table>";
echo "<tr><th>Transcript</th><th>Gene</th><th>Chromosome</th <th>ExonCount</th>";

while ($extraido = mysqli_fetch_array($result)){
    echo "<tr>";
    echo "<td>".$extraido['name']."<br/>";
    echo "<td>".$extraido['name2']."<br/>";
    echo "<td>".$extraido['chrom']."<br/>";
    echo "<td>".$extraido['exonCount']."<br/>";
}

echo "</table>";

mysqli_free_result($result);

mysqli_close($enlace);
?>

这个php代码的作用是使用html文档中引入的基因名称查询refGene表,并返回mysql表中的相应行。

但是,现在我想添加两件事:

  1. 正如您在html文档中看到的那样,我想选择一个人类表,或其他与其他物种相对应的表。第一步是,如果选择人类,则连接到具有人类数据的表格,或者如果选择了除人类之外的其他物种,则连接到任何其他物种的表格。

  2. 我想在另一个表上执行另一个查询(我假设在查询中使用JOIN函数),在另一个表上有其他类型的数据,在一个名为db_object_symbol的字段中,有&#39; s基因名称,在第一个表中显示为name2,与您在第一个html文档中放置的相同。然后,返回与特定行对应的所有字段。

  3. 所以,总结一下,首先在html中选择一个物种,然后选择对应于该物种的两个表(我每个都有两个表),然后根据你在html中写的基因,使php脚本返回两个表中的数据,对应于两个表中都存在基因名称的行。

    这两个表具有以下结构:

    +--------------+-----------+-------+--------+
    | name         | name2     | chrom | strand |
    +--------------+-----------+-------+--------+
    | NR_046018    | DDX11L1   | chr1  | +      |
    | NR_024540    | WASH7P    | chr1  | -      |
    | NR_104148    | ZNF107    | chr7  | +      |
    | NR_111960    | KDM6A     | chrX  | +      |
    | NR_026818    | FAM138A   | chr1  | -      |
    | NR_026820    | FAM138F   | chr1  | -      |
    | NR_026822    | FAM138C   | chr1  | -      |
    | NM_001005484 | OR4F5     | chr1  | +      |
    | NR_039983    | LOC729737 | chr1  | -      |
    | NR_103753    | LINC00491 | chr5  | -      |
    +--------------+-----------+-------+--------+
    

    另一张桌子就像:

    +-----------+------------------+------------+
    | db        | db_object_symbol | go_id      |
    +-----------+------------------+------------+
    | UniProtKB | DNAJC25-GNG10    | GO:0004871 |
    | UniProtKB | DNAJC25-GNG10    | GO:0005834 |
    | UniProtKB | DNAJC25-GNG10    | GO:0007186 |
    | UniProtKB | LOC100509620     | GO:0005215 |
    | UniProtKB | LOC100509620     | GO:0006810 |
    | UniProtKB | LOC100509620     | GO:0016021 |
    | UniProtKB | PPIAL4E          | GO:0000413 |
    | UniProtKB | PPIAL4E          | GO:0003755 |
    | UniProtKB | PPIAL4E          | GO:0005737 |
    | UniProtKB | PPIAL4E          | GO:0006457 |
    +-----------+------------------+------------+
    

    两个必须具有相同值的字段在第一个中是name2而在第二个中是db_object_symbol。

    我一直在尝试一些查询语法,但它总是给我一个错误。

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,您需要UNION。在查询具有相同列和数据类型的不同表时,它非常有用,这似乎就是你的情况。

这样的东西
SELECT name2
FROM table1
WHERE conditions

UNION

SELECT db_object_symbol
FROM table2
WHERE other_conditions

应该这样做 - 我不知道确切的表名,所以我明确地将它们命名为table1table2。如果name2db_object_symbol不是类似的类型,则可能需要执行手动类型转换,否则这应该有效。