3

我需要执行 MySQL 查询来搜索包含提交值的不精​​确匹配/匹配。

以下是我的数据库中的示例:

id               img
1          1001_ABC_01.jpg
2          1001_ABC_02.jpg
3          1002_ABC_01.jpg
4          1002_ABC_02.jpg
5          1002_ABC_03.jpg
6          1002_ABC_04.jpg
7          1002_ABC_05.jpg
8          1003_ABC_01.jpg
9          1003_ABC_02.jpg
10         1003_ABC_03.jpg

我需要查询来搜索文件名 ( 1002) 的第一部分,并为 img 字段中的每个返回结果分配一个不同的变量。变量的最大数量为 5。

例如,如果我 search 1002,它应该分配以下变量:

    <?php
    $img1 = '1002_ABC_01.jpg';
    $img2 = '1002_ABC_02.jpg';
    $img3 = '1002_ABC_03.jpg';
    $img4 = '1002_ABC_04.jpg';
    $img5 = '1002_ABC_05.jpg';
    ?>

这样我就可以单独回显每个文件名结果。

同样,这里的最大变量数量为 5,因此如果返回的结果超过 5 个,则只会为前 5 个分配变量。

请让我知道这是否可行以及如何编写 PHP 脚本来做到这一点。

4

10 回答 10

1
SELECT img FROM <table_name> WHERE img LIKE '%search%' ORDER BY ID DESC LIMIT 5;

substring如果前四个整数像这样固定,您可以运行:

select substring(img,1,4) from <table_name> where img = 'search' order by ID DESC limit 5;
于 2012-07-04T06:39:43.860 回答
1

我希望这能帮到您。始终尝试使用最新的 api 和函数,如MySqli尽量避免使用 mysql_*函数,因为它们已被贬值,而且 MySqli 也比 mysql_ 函数更快

$img = '1002'; // For example
$connection = new Mysqli(host, user, password, database);
$sql = "SELECT img FROM <table_name> WHERE img LIKE '$img%' LIMIT 5";

if($connection->query($sql)){
    $counter = 1;
    while ($row = $connection->fetch_object()){
        ${'img'.$counter} = $row->img;
        $counter++;
    }
}
于 2012-11-15T05:19:11.330 回答
0
$query = "SELECT * FROM my_table WHERE img_name LIKE '%1002%' LIMIT 5";

foreach ( $fetched_row as $value ) {
  echo $value [ 'img_name' ]; // or whatever you want to do
}

Something like that.

于 2012-07-04T06:34:24.390 回答
0

your code will look like this:

$input = '1002'; // For example
$query = "SELECT id, img FROM table_blah WHERE img LIKE '$input%' LIMIT 5";

This query is basically selecting id, and img from the table table_blah, and img must be the same as 1002, and % meaning absolutely anything from there on. Limited to 5 results.

Then:

$result = mysql_query($query);

while ($row = mysql_fetch_array($result)) {
    // Code for each result here.
    // id = $row['id']
    // img = $row['img']
}
于 2012-07-04T06:34:56.363 回答
0
     $query = "SELECT * FROM img_table WHERE img_name regexp concat('1002', '%')"
     $results = mysql_query($query);

那么 $results 是一个 img 字符串数组

于 2012-11-06T19:43:39.653 回答
0

要搜索部分匹配,您可以使用LIKESQL 中的运算符。在这种情况下,您可以编写:

$sql = "SELECT img FROM tablename WHERE img like '1002%'";

如何在 PHP 中执行此查询并获取结果取决于您使用的数据库 API:旧 MySQL?MySQLi? PDO?此外,1002可能是用户输入,在这种情况下,您必须保护您的程序免受 SQL 注入攻击。

至于第二部分,你确定你想要不同的变量名而不是数组吗?数组更容易使用。如果您首先在数组中累积数据然后使用,则可以获得不同的变量名称extract

$result = array();
$counter = 1;
$rs = mysql_query($sql); // using old mysql API

while ($row = mysql_fetch_array($rs)) {
    $result["img".$counter] =  $row[0];
    $counter = $counter + 1;
}

extract($result);
// now $img1, $img2, $img3, ... are defined
于 2012-07-04T06:47:04.757 回答
0

使用此查询

SELECT img as IMG
FROM my_table
WHERE img LIKE '1002%'
order by id desc
LIMIT 5
于 2012-07-04T06:36:53.673 回答
0
<?php
  $query="SELECT id,img as image FROM image_table 
  where img like '%$keyword%' limit 5";
  $res=mysql_query($query) or die(mysql_error());
  while ($img = mysql_fetch_array($res)) {
    echo $img['image'];
  }
?>
于 2012-07-04T06:39:07.570 回答
0

我希望这能帮到您。

$queryStr = "SELECT img FROM table_name WHERE search_str LIKE '1002%'";
$query = mysql_query($queryStr);

while($row = mysql_fetch_assoc($query)){
    $imageArray[] = $row;   
}

// Print the array
echo '<pre>';
print_r($imageArray);
echo '</pre>';

// How to use the array
foreach($imageArray as $key=>$val){
    echo 'File Name: '.$val;
    echo '<br />';
    echo '<img src="'.$val.'" />';  
    echo '<hr />';
}

// Now show first five result
    // Alternet: You can use LIMIT and order by with mysql
// With php
for($i=0;$i<5;$i++){
    echo 'File Name: '.$imageArray[$i];
    echo '<br />';
    echo '<img src="'.$imageArray[$i].'" />';   
    echo '<hr />';  
}
于 2012-07-04T06:45:00.863 回答
0
$con = new Mysqli(host, user, password, database);
$result = $con->query("SELECT * FROM table WHERE image LIKE %$search% ORDER BY id DESC LIMIT 5");
if($result){
    while ($row = $con->fetch_object()){
        $img_arr[] = $row;
    }
}
于 2012-07-04T06:42:01.050 回答