Cómo mostrar los n primeros registros de una tabla o consulta

En ocasiones es necesario mostrar los n primeros registros de una tabla o consulta.

Supón que tienes una base de datos donde guardas un historial de noticias. Quieres mostrar en la portada de tu sitio web las 5 noticias más recientes. Es sencillo realizar una consulta que te devuelva todas las noticias ordenadas por fecha descendente, pero solamente necesitas las 5 primeras.

Para hacerlo en mySQL se utiliza LIMIT

Sintaxis:

SELECT * FROM tabla LIMIT x, y

Donde:
x es el renglón a partir del cual se devolverá. El primer renglón es 0, no 1.
y es la cantidad de registros a devolver.

De tal manera que:

SELECT * FROM tabla LIMIT 0, 5

devuelve los primeros cinco renglones a partir del primero. Es decir, los renglones 0, 1, 2, 3 y 4.

SELECT * FROM tabla LIMIT 5, 10

devuelve 10 renglones a partir del sexto, es decir, los renglones 6, 7, 8, 9, 10, 11, 12, 13, 14 y 15.

Regresando al caso que planteado al inicio de este post, la sentencia SQL quedaría asi:

SELECT * FROM noticias ORDER BY fecha DESC LIMIT 0,5

Para una referencia completa visita:
http://dev.mysql.com/doc/refman/5.0/es/select.html

Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints

Este error ya ha aparecido en dos de mis proyectos.

Tenía un Datalist (o Gridview) que estaba ligado a un ObjectDatasource, el cual se alimentaba de un Business Layer que a su vez tomaba los datos de un archivo XSD.

Estuve peléandome con todos estos objetos, checando sus propiedades, borrándolos y volviéndolos a crear, y nada funcionó.

En las dos ocasiones que se me presentó esta situación, resulta que el problema estaba en los datos!

En ambas ocasiones estaba convirtiendo la aplicación de ASP.NET 1 a ASP.NET 2, por lo que ya contaba con la base de datos y ésta ya tenia información real.

Así es que si no encuentras el problema en la lógica, checa también los datos. En uno de los casos pasaba que había un campo de fecha, el cual tenía muchos registros que tenían la fecha establecida en “0000-00-00”, es decir, no la habían capturado porque era un campo que quedó en desuso y no tuve la precisión de eliminarlo o llenarlo con una fecha válida.

El caso es que cuando la aplicación trataba de llenar el DataList, se encontraba con esa fecha inválida y regresaba el error:

Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.

Mi solución: llené todos esos campos con fechas válidas y funcionó.

Repito, pasa muchas veces, si no encuentras el error en tu lógica, siempre revisa la validez de los datos en la base de datos.

Actualización

Me volvió a suceder el mismo error, y encontré una razón más contundente.

Resulta que mi sentencia SQL hacía un join de tres tablas. Estaba intentando colocar esa sentencia en un TableAdapter que había creado para una de las tablas:

TableAdapter para una sola tabla

El TableAdapter mostrado arriba contiene la definición de una tabla, es por eso que se pueden leer los campos id, idPostal, idusuario, etc.

Al ejecutar el join se mostraba el error descrito en la primera parte de este post.

Para solucionar esta situación tuve que pasar la sentencia que contenía el join a un nuevo TableAdapter, como se muestra a continuación:

TableAdapter para un join de varias tablas

Listo, como puedes ver el TableAdapter creado ya no contiene toda la definición de las columnas. Le cree una clase BusinessLogic la cual uso en mi código y ya no marca esos problemas. 🙂

Segunda Actualización

En otros casos puede ser la propiedad MaxLength. Por ejemplo, si en tu TableAdapter tienes esa propiedad establecida en un valor distinto al que aparece para ese mismo campo en las sentencias Insert o Update, también ocurre este error. Todos los MaxLength para el mismo campo deben ser iguales para todas las sentencias y para las propiedades mismas del adaptador.

Cómo reescribir el URL (URL rewriting) para usar Permalinks con WordPress y Windows 2003 (IIS)

Breve introducción

WordPress viene con un mecanismo llamado Permalinks, mediante el cual se reescribe el URL.

Sin Permalinks, tus posts se verán así:
https://www.viale.mx/?p=4432

Con Permalinks, se verán así:
https://www.viale.mx/como-hacer-un-sitio-web

Como podrás ver, la ventaja es que el URL se vuelve mas legible, y más significativo para las máquinas de búsqueda como Google.

Ahora bien, para lograr esta reescritura del URL necesitas tener acceso al servidor mediante remote desktop. No te bastará con una cuenta de FTP. También puedes pedirle al administrador que lo haga por ti.

Cómo hacerlo

Probado con: WordPress 2.1 y Windows Server 2003

La herramienta para reescritura de URLs que yo utilizo la hizo Dean Lee.

1. Descarga los archivos

Descarga los archivos de Dean Lee de su sitio web y extráelos. Debes tener los siguientes archivos:

config.ini
msvcr80.dll
WordPressPlugin.dll

Cópialos y pégalos en la carpeta raíz de tu blog.

Con un bloc de notas abre el archivo config.ini. Encontrarás que solamente tiene una diagonal. Esta configuración se utiliza si tu blog estará en la carpeta raíz de tu sitio web. Es decir, si tu blog será accesible mediante una dirección como esta:

https://www.viale.mx

Por otro lado, si tu blog está en una carpeta, por ejemplo https://www.viale.mx/blog entonces tienes que modificar el archivo config.ini para que diga: /blog/

Nota: Si piensas poner tu blog en una carpeta del dominio, te recomiendo que no lo hagas. Mejor crea una entrada en tu dns para lograr una dirección como: http://blog.misitioweb.com/. ¿Por qué? Porque vamos a activar un filtro ISAPI en el sitio web. Si el resto de tu sitio web no lo va a usar, entonces más vale separarlo en dos sitios web, por si las dudas.

2. Configura IIS

En Windows Server, en la consola de Administración de la PC, abre las propiedades de tu sitio y escoge la pestaña ISAPI Filters:

Propiedades del Sitio Web

En esa ventana haz clic en el botón Add. En la nueva ventana escoge el archivo WordPressPlugin.dll que copiaste a tu sitio web y ponle como nombre WordPressPlugin.

ISAPI

Acepta todo hasta que se cierre la ventana de propiedades del Sitio Web.

3. Configura php.ini

Con un bloc de notas abre tu archivo php.ini. De acuerdo a tu instalación este archivo puede estar ubicado en diferentes carpetas, normalmente está en c:windowsphp.ini

Haz una búsqueda en el archivo por la palabra cgi.force_redirect y asegúrate de que esa línea diga:

cgi.force_redirect = 0

OJO: Si tiene un punto y coma antes, quítaselo.

Ahora agrega la siguiente línea:

cgi.fix_pathinfo = 1

Debe quedar así:

php.ini

Ahora reinicia el IIS.

4. Configura WordPress

Abre tu consola de WordPress y ve a Opciones->Permalinks.

Dale clic a la opción Personalizada, especificar aquí y teclea

/%year%/%monthnum%/%day%/%postname%/

Permalink

Oprime el botón Actualizar estructura de permalink para guardar los cambios.

Ya debe de funcionar. Si no lo hace, asegúrate de que hayas reiniciado IIS.

Ahora navega por tu blog y revisa cómo las direcciones de tus posts han cambiado. 🙂

Nota importante. Un punto negativo de esta herramienta es que si utilizas algún caracter no común en inglés. Por ejemplo un signo de interrogación que abre: ¿, entonces cuando intentes hacer clic a la liga de tu post, no abrirá porque pone un símbolo extraño como %c2%bf.

Generador de Lorem Ipsum (texto de relleno)

Cuando diseñamos un sitio web, u otro proyecto, y el cliente no nos ha dado la información completa, muchas veces necesitamos rellenar los espacios con texto. Lo peor que puedes hacer es poner “Aquí va el texto aquí va el texto aquí va el texto aquí va el texto aquí va el texto aquí va el texto aquí va el texto aquí va el texto”. (¡lo he llegado a ver!)

Es más apropiado rellenar esos espacios con el texto Lorem Ipsum, que ha sido un estándar desde los años 1500’s.

Para generar varios párrafos de este texto, entra a esta página.

Muestra:

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin dapibus odio at leo. In condimentum pretium eros. Sed odio felis, eleifend id, laoreet mollis, vestibulum at, arcu. Donec viverra sapien. In at lacus vel augue imperdiet iaculis. In faucibus urna eu massa. Vestibulum ipsum erat, blandit ut, eleifend a, semper vitae, justo. Donec ullamcorper magna ut neque. Quisque varius, diam et blandit suscipit, magna velit tempus ante, sit amet semper velit velit vestibulum augue. Nullam vulputate, turpis vel gravida pulvinar, massa sapien lacinia risus, vitae tempor nisl lacus in pede. Sed eget libero in velit mattis viverra. In arcu lorem, pellentesque ullamcorper, pulvinar vitae, iaculis ut, leo. Maecenas sed dui vitae risus auctor aliquet. Donec magna. Etiam rhoncus. Ut risus quam, adipiscing quis, commodo in, porttitor ac, justo. Phasellus egestas velit quis mauris. Nullam feugiat, lectus nec imperdiet venenatis, enim metus imperdiet dolor, at varius nibh sapien non nulla. Sed justo leo, viverra lobortis, consequat at, sagittis non, massa. Vivamus mauris quam, commodo vitae, aliquet eget, iaculis ut, nibh.

Cómo desplegar información de depuración en ASP.NET 2

La información de depuración es útil para descubrir errores que a primera vista no identificamos.

Si tu aplicación está escrita en ASP.NET 2, Teclea Trace="true" dentro del tag @Page inicial de la página. Tu primera línea debe verse así:

  1. <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Pagina.aspx.vb" Inherits="Pagina" Trace="true" %>

Ahora visita tu página, verás el contenido normal, pero bajo éste, aparece una gran cantidad de información interna, como:

  • Request Details
  • Trace Information
  • Control Tree
  • Session State
  • Application State
  • Request Cookies Collection
  • Response Cookies Collection
  • Headers Collection
  • Response Headers Collection
  • Form Collection
  • Querystring Collection
  • Server Variables

Nota:
Otra manera de desplegar las variables de servidor es como se hacía en ASP tradicional. Crea una página .asp y pega el siguiente código en ella:

  1. <table border="1" cellpadding="3" cellspacing="0">
  2. <th colspan="2">Variables de servidor</th>
  3. <%
  4. Dim var
  5. For Each var in Request.ServerVariables
  6.    Response.Write("<tr>")
  7.     Response.Write("<td><b>" & var & "</b>:</td>")
  8.    Response.Write("<td>" & Request.ServerVariables(var) & "&nbsp;</td>")
  9.     Response.Write("</tr>")
  10. Next
  11. %>
  12. </table>