gpt4 book ai didi

php - 根据一次搜索查询两个表

转载 作者:行者123 更新时间:2023-11-29 19:44:42 25 4
gpt4 key购买 nike

我在 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 的字段中,有基因名称,在第一个表中显示为 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。

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

最佳答案

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

类似的东西

SELECT name2
FROM table1
WHERE conditions

UNION

SELECT db_object_symbol
FROM table2
WHERE other_conditions

应该可以解决问题 - 我不知道确切的表名称,所以我将它们命名为 table1table2,显然。如果 name2db_object_symbol 不是相似的类型,您可能需要执行手动类型转换,但否则这应该可以工作。

关于php - 根据一次搜索查询两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41101988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com