【问题标题】:how to search all the tables of the database using php mysqli and display the answer如何使用 php mysqli 搜索数据库的所有表并显示答案
【发布时间】:2016-03-31 06:58:59
【问题描述】:

我刚刚开始学习 mysqliphp ...所以我是新手。 我正在尝试为 babynames 建立一个网站。

我在 phpmyadmin 中有一个babynames 数据库。有表 country1country2country3....等等。所有表格都有相同的列 idnamemeaninggenderalphabet >.

我使用以下代码使用 PHP 和 MYSQLI 打印名称表

$sql1="SELECT id,name, meaning, alpha, gender FROM $country WHERE gender='$gender' AND alpha='$alpha' $limit";
    $query=mysqli_query($con,$sql1);    

while($rows=mysqli_fetch_array($query)){

        echo "<td><a href='meaning-of.php?name=$rows[name]'>".$rows['name']."</a></td>";
        echo "<td>".$rows['meaning']."</td>";
        echo "<td>".$rows['gender']."</td></tr>";
        }

name 列链接到meaning-of.php?name=$rows[name]

现在我想要一个 PHP 和 MYSQLI 中的代码来搜索数据库“babynames”的所有表(比如 100 个表)以查找特定的 name 并显示相同的 name含义。 如果 name 在表格中不止一次出现,那么所有的名字都应该连同它们各自的含义一起显示出来。

我如何在所有表中搜索特定名称并使用 PHP 和 MYSQLI 显示。

我想通过像 http://localhost/meaning-of.php?name=Johnhttp://localhost/meaning-of.php?name=samson 那样只将 name 变量传递到地址栏中来搜索数据库,并且通过仅根据名称搜索数据库的所有表来查找含义。like 如果设置名称而不是通过 $name=$_GET["name"]; 获取名称然后搜索整个数据库表并显示含义

有没有类似的代码

SELECT *(all columns) FROM * (all the tables or the database name or all the databases) WHERE name=$name;

请帮忙。请提前谢谢您。

【问题讨论】:

  • 也许整理你的数据库可能会有所帮助。一张表,其中包含您的 countries 列表和 unique key 值。一个带有 unique key 值的 names 表,然后创建另一个表 uses,其中包含 names.keycountries.key。有些名字可能出现在不止一个国家​​/地区,因此会显示为1,21,3。查询所有名称会更容易,查询特定国家/地区的名称也很容易。
  • 在你的常识下阅读我的评论他的回答

标签: php mysql


【解决方案1】:

将所有数据保存在单个表中,添加字段country 以区分国家/地区。

这是对这个问题的唯一正确答案。

【讨论】:

  • 你的常识是 100% 正确的。重组你的数据库。制作一个名为 Countries 的表,并为其提供一个带有 primary keyID 列(+ auto increment 可选)。然后在Babynames 一个名为CountryID 或任何适合您的列中。然后使用Countries 表的primary keyCountries 表“连接”到Babynames 表。或者作为(不太喜欢的)选项,您可以将国家名称放在CountryID 列中(当然将其重命名为Country ;-))
  • 是的,这是一个很好的方法。但它会使桌子很大。我正在计划超过 100,000 个名称。我觉得拥有这么大的表会花费更多时间来搜索和检索数据。这就是为什么我想要单独的表格。
  • @rajendraprasad 表打算很大。数据库没问题。
【解决方案2】:

您可以使用 UNION 子句从多个 select 语句中获取结果mysql doc

(SELECT * FROM county1 WHERE name=$name)
UNION
(SELECT * FROM county2 WHERE name=$name);

可以从information_schema查询所有表名

SELECT table_name FROM information_schema.tables
WHERE table_name LIKE "country%"
    AND table_schema = "<name_of_country_database>";

所以完整的解决方案是这样的:

    $tables_sql = "SELECT table_name FROM information_schema.tables WHERE table_name LIKE 'country%' AND table_schema = 'babynames'";
    $tables_query = mysqli_query($con,$tables_sql);

    $sql1 = '';
    while ($table = mysqli_fetch_array($tables_query)) {
        if ($sql1 != '') {
            $sql1 .= ' UNION ';
        }
        $sql1.= " (SELECT name, meaning FROM " . $table['table_name'] . " WHERE name='$name') ";
    }

    $query=mysqli_query($con,$sql1);
    while($rows=mysqli_fetch_array($query)){
        echo "<tr>";
        echo "<td>".$rows['name']."</td>";
        echo "<td>".$rows['meaning']."</td>";
        echo "</tr>";
    }

【讨论】:

  • 非常感谢您的回复。假设说我有 100 个表...... UNION 代码会变得非常大。我想用一个小的直接代码一次搜索整个数据库。
  • 我不知道您可以通过提供表通配符一次轻松地从多个表中进行选择。不过,您可以做的是从 information_schema 中查询表名,然后在 php 中编写 UNION 查询。
  • 我再次感谢您的回答。我想通过像这样 localhost/meaning-of.php?name=John 仅将 name 变量传递到地址栏中来搜索数据库,并通过仅基于搜索数据库的所有表来查找含义请问名字。
  • 我修复了查询,但整体逻辑保持不变。
猜你喜欢
  • 1970-01-01
  • 2014-11-29
  • 2016-04-10
  • 2015-03-31
  • 1970-01-01
  • 2013-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多