2012-07-04 3 views
3

Мне нужно выполнить запрос MySQL для поиска неточного соответствия/соответствия, содержащего переданное значение.PHP - результат нескольких 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
$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 
} 

Нечто подобное.

0

ваш код будет выглядеть следующим образом:

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

Этот запрос в основном выбор идентификатора, и IMG из таблицы table_blah и img должны быть таким же, как 1002, и % значения абсолютно все оттуда сверху. Ограниченный до 5 результатов.

Тогда:

$result = mysql_query($query); 

while ($row = mysql_fetch_array($result)) { 
    // Code for each result here. 
    // id = $row['id'] 
    // img = $row['img'] 
} 
+0

Jared: ваш выглядеть вроде как он делает то, что я хочу, почти ... проблема в том, что это несколько результатов из одного и того же поля в базе данных ... – user1500675

+0

запустите этот точный код и замените прокомментированный код на: 'echo 'id: {$ row [' id ']} img : {$ row ['img']} ";' вы найдете это работает :) – jared

+0

как вы поедете с другом? – jared

0

Используйте этого запрос

SELECT img as IMG 
FROM my_table 
WHERE img LIKE '1002%' 
order by id desc 
LIMIT 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']; 
    } 
?> 
+0

Ваш код содержит SQL-инъекцию (или, по крайней мере, имеет потенциал для одного). Кроме того, прекратите рекомендовать другие функции mysql_ *, они больше не поддерживаются, а сообщество начинает процесс устаревания. Вы должны начать писать код с помощью API PDO или MySQLi и готовых операторов. –

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; 
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; 
    } 
} 
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 />'; 
} 
0

Для поиска частичного совпадения можно использовать оператор LIKE в SQL. В этом случае можно было бы написать:

$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 
0
 $query = "SELECT * FROM img_table WHERE img_name regexp concat('1002', '%')" 
    $results = mysql_query($query); 

тогда $ Результаты является массивом IMG строк

1

Я надеюсь, что это поможет. Всегда старайтесь использовать последний APIs и функцию, как 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++; 
    } 
} 
Смежные вопросы