我需要执行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。
例如,如果我搜索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脚本来执行此操作。
答案 0 :(得分: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;
答案 1 :(得分:1)
我希望这会对你有所帮助。总是尝试使用最新的apis和像 MySqli 这样的功能,尽量避免使用 mysql _ * 函数,因为它们已被弃用,MySqli也比mysql_ functions更快
$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++;
}
}
答案 2 :(得分: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
}
类似的东西。
答案 3 :(得分:0)
您的代码将如下所示:
$input = '1002'; // For example
$query = "SELECT id, img FROM table_blah WHERE img LIKE '$input%' LIMIT 5";
此查询基本上是选择 ID,而img 来自表table_blah
,img
必须与1002相同,{ {1}}绝对意味着从那里开始。 限制至5个结果。
,然后强>
%
答案 4 :(得分:0)
使用此查询
SELECT img as IMG
FROM my_table
WHERE img LIKE '1002%'
order by id desc
LIMIT 5
答案 5 :(得分: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'];
}
?>
答案 6 :(得分: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;
}
}
答案 7 :(得分: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 />';
}
答案 8 :(得分:0)
要搜索部分匹配,可以在SQL中使用LIKE
运算符。在这种情况下,你可以写:
$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
答案 9 :(得分:0)
$query = "SELECT * FROM img_table WHERE img_name regexp concat('1002', '%')"
$results = mysql_query($query);
然后$ results是一个img字符串数组