【问题标题】:after Mysql UNION SELECT $stmt .. i got data from multiple tables在 Mysql UNION SELECT $stmt .. 我从多个表中获取数据之后
【发布时间】:2018-05-04 18:06:48
【问题描述】:

Mysql UNION SELECT $stmt 之后。我从多个表中获取数据现在的任务是从实际表中选择 id

我用来获取数据的是

$stmt = $DB_con->prepare('SELECT * FROM city UNION SELECT * FROM fruit ORDER BY CreatedTime ASC LIMIT 15');

$stmt->execute();

if($stmt->rowCount() > 0)
{
    while($row=$stmt->fetch(PDO::FETCH_ASSOC))
    {
        extract($row);

回显 $id ; 回声 $userName ;

我得到了类似的数据 1 - 水手 2 - 香蕉 3 - 橙色 4 - 德里

现在我需要选择实际的 id 并从原始表中获取值

【问题讨论】:

  • 能否为这两个表添加表结构,并放入一些数据和预期输出。
  • 表格城市包含 1 - 海得拉巴 2 - 金奈 3 - 班加罗尔 4 - 苏拉特 5 - 德里 6 - 拉杰科特 7 - 艾哈迈达巴德 8 - 果阿餐桌水果 contacci 1 - 香蕉 2 - 橙子 3 - staberry 4 - 图表5 - pomogranet 6 - guvva 现在我得到了像 1 - Hyderabad 2 - 图表 3 - surat 4 - guvva 5 - 橙色 6 - 德里现在我需要从原始表中获取实际 id 的数据
  • 还有一个疑问,例如在城市表记录“1 - Hyderabad”中,这是否包含在单列中,或者类似 ID 包含“1”和 city_name 包含“Hyderabad”。如果是这种情况,那么您可以参考“Jeffry Evan”发布的答案,以满足您的要求。
  • ID 包含“1”,city_name 包含“Hyderabad”。
  • 我已经发布了完整的实现逻辑,让我们尝试一次,如果有任何问题,请告诉我们。

标签: php mysql


【解决方案1】:

您无法使用当前查询从该联合结果中知道原始表。

您可能希望将查询更改为类似的内容,以便知道该 ID 的原始表在哪里

SELECT id,value,'city' as tblName FROM city UNION SELECT id,value,'fruit' as tblName FROM fruit

【讨论】:

    【解决方案2】:

    试试下面的代码,这里是如何实现的逻辑,检查一下,如果有任何问题,请告诉我们。

    mysql> create table city(id int, city_name varchar(20));
    Query OK, 0 rows affected (0.35 sec)
    
    mysql> create table fruits(id int, fruit_name varchar(20));
    Query OK, 0 rows affected (0.40 sec)
    
    mysql> insert into city values(1,'Hyderabad');
    Query OK, 1 row affected (0.04 sec)
    
    mysql> insert into fruits values(1,'Banana');
    Query OK, 1 row affected (0.06 sec)
    
    mysql> SELECT id,city_name,'city' source FROM city UNION  SELECT id,fruit_name,'fruits' FROM fruits;
    +------+-----------+--------+
    | id   | city_name | source |
    +------+-----------+--------+
    |    1 | Hyderabad | city   |
    |    1 | Banana    | fruits |
    +------+-----------+--------+
    2 rows in set (0.01 sec)
    
    
    $stmt = $DB_con->prepare('SELECT id,city_name FROM city UNION SELECT id,fruit_name FROM fruit ORDER BY CreatedTime ASC LIMIT 15');
    
    $stmt->execute();
    
    if($stmt->rowCount() > 0)
    {
        while($row=$stmt->fetch(PDO::FETCH_ASSOC))
        {
            extract($row);
    
        ---write here a case/if statement like
        If($source=="city")
        {
            --again prepare the statement and select the data from city table like
            $stmt_city = $DB_con->prepare('SELECT id,city_name,other_col_val FROM city where id = $id');
        }
        else
        {
            --again prepare the statement and select the data from fruits table like
            $stmt_city = $DB_con->prepare('SELECT id,fruit_name,other_col_val FROM fruits where id = $id');
        }
        }
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多