繁体   English   中英

从不同列的同一表中获取 SQL 数据

[英]Fetch SQL data from same table of different column

我正在使用 get 请求来获取serial并将其放入查询中。

$id = $_GET['id'];
$select = $pdo->prepare("SELECT * FROM tbl_product WHERE serial='.$id.'");
$select->execute();
while($row = $select->fetch(PDO::FETCH_OBJ)){
    echo '
<tr>
    <td>'.$row->pname.'</td>
   <td>'.$row->pcategory.'</td>
    <td>'.$row->serial.'</td>
    <td>'.$row->sku.'</td>
    ';
}

我的表看起来像这样,我尝试对同一个表使用内部联接,但没有用。 当用户通过 get 请求localhost?id=12345678 serial 我希望它显示item1 - item3 ,与其SKU匹配

id | sku | serial   | product_name
0  | ABC | 12345678 | item1
1  | ABC | 87654321 | item2
2  | ABC | 23456789 | item3
3  | DEF | 56789234 | item4

您可以像这样尝试内部联接:

select id, c.sku, serial, product_name from table_name t
inner join (
select sku from table_name where serial ='12345678'
)c on t.sku = c.sku

在您的代码中:

$id = $_GET['id'];
$query = "select id, c.sku, serial, product_name from table_name t
inner join (
select sku from table_name where serial = :serial
)c on t.sku = c.sku";
$select = $pdo->prepare($query);
$select->bindParam(':serial', $id);
$select->execute();
while($row = $select->fetch(PDO::FETCH_OBJ)){
    echo '
<tr>
    <td>'.$row->pname.'</td>
   <td>'.$row->pcategory.'</td>
    <td>'.$row->serial.'</td>
    <td>'.$row->sku.'</td>
    ';
}

不要相信任何输入,使用preparebindParam来避免 SQL 注入。 您可以在此处参考 SQL 注入https://www.php.net/manual/en/security.database.sql-injection.php

就像是

select * from tbl_product where sku = (select sku from tbl_product where serial = :serial) 

可能会这样做,假设是 PDO 准备好的语句。

自加入

$select = $pdo->prepare("SELECT * FROM tbl_product P1 LEFT JOIN tbl_product P2 ON P2.sku = P1.sku  WHERE P1.serial='.$id.'")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM