Puedo recuperar registros de mis tablas por encima de 5000 registros mínimos, y tengo cuatro formas de hacerlo, y no sé cuál y por qué es el adecuado para mi trabajo solicitado y cuál es mejor si se trata de registros menores: (Consultas)
#---- Rows SELECT a.`id`, a.`content` FROM `docs` a;Uso el ciclo while() para cada fila:
while ($row = $rows->fetch()) { echo "<option value=\"{$row['id']}\">{$row['content']}</option>"; } #---- Group SELECT GROUP_CONCAT( a.`id`, ".", a.`content` ) AS `options` FROM `docs` a;Yo uso el bucle exploit() + foreach() (no se permite que el contenido tenga naturalmente "." en su texto) :
foreach (explode(",", $options) as $option) { $option = explode(".", $option); //[0]: id, [1]: content echo "<option value=\"{$option[0]}\">{$option[1]}</option>"; } #---- HTML Rows SELECT CONCAT("<option value=\"",a.`id`,"\">",a.`content`,"</option>") AS `option` FROM `docs` a;Aplico html en la consulta y luego uso while() loop :
while ($row = $rows->fetch()) { echo $row; } #---- HTML Group SELECT GROUP_CONCAT("<option value=\"",a.`id`,"\">",a.`content`,"</option>" SEPARATOR "") FROM `docs` a;aquí todo ya está hecho en consulta para solo imprimir:
echo $rows->fetch();Tomaré el requisito de su cliente al pie de la letra, aunque un menú desplegable de 5000 elementos me volvería loco si tuviera que usarlo.
Podría considerar usar el elemento de lista de datos HTML5 para mejorar un poco este UX.
Desde el punto de vista de php, la forma en que genera este código probablemente no sea lo suficientemente importante como para preocuparse. Sin embargo, desde el punto de vista de MySQL, la consulta más simple con el ciclo while (su primera opción) es mejor. ¿Por qué?
GROUP_CONCAT() necesita una configuración si genera cadenas largas con él. Lee esto. Longitud máxima de MySQL y GROUP_CONCAT() Un desarrollador inteligente, especialmente cuando se enfrenta a un requisito extraño, lo mantiene simple.
El procesamiento de un conjunto de resultados de tamaño mediano fila por fila puede reducir los requisitos de RAM en su programa php y en su servidor MySQL.
Es más fácil de leer para el momento inevitable en que usted, o alguien, necesita hacer un mejor trabajo con esta experiencia de usuario.
Puede usar JQuery select2 y aplicarle un método de búsqueda, que obtendrá datos a través de una llamada AJAX. Uso JSON para completar la selección. Estoy agregando un código de muestra aquí, modifíquelo según sus requisitos.
HTML de muestra
<select name="ItemID" id="ItemID"> <option value="0">--</option> </select>JavaScript relacionado
$("#ItemID").select2({ minimumInputLength:3, ajax: { url: 'json/getItemList.php', dataType: 'json', data: function (params) { return { Src: params.term }; }, processResults: function (data) { var items = []; for (var i = 0; i < data.length; ++i) { items.push({id: data[i][0], text: data[i][1]}); } return { results: items, } }, }, });Código PHP relacionado
<?php $Src = ""; if(isset($_REQUEST['Src'])) $Src = $_REQUEST['Src']; // Write your own code to fetch data, and replace the below line //$oList = $mdb->getItemListJSON3($tcmp->getCompanyID(), $Src, 2); $jsonStr = json_encode($oList); print($jsonStr); ?>