我在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表中的相应行。
但是,现在我想添加两件事:
正如您在html文档中看到的那样,我想选择一个人类表,或其他与其他物种相对应的表。第一步是,如果选择人类,则连接到具有人类数据的表格,或者如果选择了除人类之外的其他物种,则连接到任何其他物种的表格。
我想在另一个表上执行另一个查询(我假设在查询中使用JOIN函数),在另一个表上有其他类型的数据,在一个名为db_object_symbol的字段中,有&#39; s基因名称,在第一个表中显示为name2,与您在第一个html文档中放置的相同。然后,返回与特定行对应的所有字段。
所以,总结一下,首先在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。
我一直在尝试一些查询语法,但它总是给我一个错误。
答案 0 :(得分:0)
如果我正确理解您的问题,您需要UNION
。在查询具有相同列和数据类型的不同表时,它非常有用,这似乎就是你的情况。
像
这样的东西SELECT name2
FROM table1
WHERE conditions
UNION
SELECT db_object_symbol
FROM table2
WHERE other_conditions
应该这样做 - 我不知道确切的表名,所以我明确地将它们命名为table1
和table2
。如果name2
和db_object_symbol
不是类似的类型,则可能需要执行手动类型转换,否则这应该有效。