PHP: resultado múltiple de MySQL, en variables separadas
Frecuentes
Visto 1,369 equipos
3
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.
10 Respuestas
1
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
1
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
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
}
Algo como eso.
Respondido 04 Jul 12, 07:07
0
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
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'];
}
?>
Respondido 04 Jul 12, 07:07
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;
}
}
Respondido 04 Jul 12, 07:07
0
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
0
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
0
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 del 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
0
$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 php mysql rows or haz tu propia pregunta.
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. - teresko