PHP: resultado múltiple de MySQL, en variables separadas

Necesito hacer una consulta de MySQL para buscar una coincidencia/coincidencia inexacta que contenga el valor enviado.

El siguiente es un ejemplo de lo que hay en mi base de datos:

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

Necesito la consulta para buscar la primera parte del nombre del archivo (1002) y asigne a cada resultado devuelto en el campo img una variable diferente. La cantidad máxima de variables sería 5.

Por ejemplo, si busco 1002, debe asignar las siguientes variables:

    <?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';
    ?>

de esa manera puedo hacer eco de cada resultado de nombre de archivo individualmente.

Nuevamente, la cantidad máxima de variables aquí será 5, por lo que si se devuelven más de 5 resultados, solo se asignarán variables a los primeros 5.

Por favor, hágame saber si esto es posible y cómo escribir un script PHP para hacerlo.

preguntado el 04 de julio de 12 a las 07:07

10 Respuestas

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

Usted podría substring función, si los primeros cuatro enteros se fijan así:

select substring(img,1,4) from <table_name> where img = 'search' order by ID DESC limit 5;

Respondido 04 Jul 12, 07:07

Espero que esto ayude. Siempre trate de usar las últimas apis y funciones como MySqli tratar de evitar mysql_ * funciones porque están depreciadas y MySqli también es más rápido que las funciones 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++;
    }
}

respondido 15 nov., 12:05

$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
}

Algo como eso.

Respondido 04 Jul 12, 07:07

Utilice esta consulta

SELECT img as IMG
FROM my_table
WHERE img LIKE '1002%'
order by id desc
LIMIT 5

Respondido 04 Jul 12, 07:07

<?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'];
  }
?>

Respondido 04 Jul 12, 07:07

Su código contiene inyección SQL (o al menos tiene potencial para una). Además, deja de recomendar otros mysql_* función, ya no se mantienen y la comunidad ha comenzado el proceso de desaprobación. Debe comenzar a escribir código con las API de PDO o MySQLi y las declaraciones preparadas. - tereško

$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;
    }
}

Respondido 04 Jul 12, 07:07

Espero que esto te ayude.

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

Respondido 04 Jul 12, 07:07

Para buscar una coincidencia parcial, puede utilizar el LIKE operador en SQL. En este caso podrías escribir:

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

Cómo realizar esta consulta y obtener los resultados en PHP depende de la API de la base de datos que esté utilizando: ¿MySQL antiguo? ¿MySQLi? DOP? También, 1002 es probablemente una entrada del usuario, en cuyo caso debe proteger su programa contra ataques de inyección SQL.

En cuanto a la segunda parte, ¿está seguro de que desea diferentes nombres de variables y no una matriz? Las matrices son mucho más fáciles de usar. Puede obtener diferentes nombres de variables si primero acumula los datos en una matriz y luego usa 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

Respondido 04 Jul 12, 07:07

su código se verá así:

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

Esta consulta es básicamente seleccionar id e img en la mesa table_blah y img debe ser igual a 1002, y % significando absolutamente cualquier cosa a partir de ahí. Limitada a 5 resultados.

Entonces:

$result = mysql_query($query);

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

Respondido 04 Jul 12, 07:07

jared: parece que el tuyo hace lo que yo quiero, casi... el problema es que son múltiples resultados del mismo campo en la base de datos... - user1500675

ejecute este código exacto y reemplace el código comentado con: echo "id: {$row['id']} img: {$row['img']}"; Encontrarás que funciona :) - arrendajo

     $query = "SELECT * FROM img_table WHERE img_name regexp concat('1002', '%')"
     $results = mysql_query($query);

entonces $resultados es una matriz de cadenas img

respondido 06 nov., 12:19

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.