Ver Mensaje Individual
  #13 (permalink)  
Antiguo 24/10/2008, 10:57
jurena
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 10 meses
Puntos: 300
Respuesta: Se puede simplificar esta sentencia?...

talle,
La de los 10 últimos. He usado los datos y nombres que tengo yo en mi base. No he puesto date porque creo que es una palabra reservada y no debe usarse para campo.
Código sql:
Ver original
  1. SELECT dl.title, dl.location, dl.url, dl.rank, dl.fecha_de_alta, dl.description, dc.path, COUNT( dlc.id_link ) totallinks, t1.totcom, dl.STATUS
  2. FROM dir_links dl
  3. INNER JOIN dir_categories dc ON dl.id_category = dc.id
  4. INNER JOIN (
  5.  
  6. SELECT dl.id, COUNT( * ) totcom
  7. FROM `dir_links` dl
  8. INNER JOIN dir_link_comments dlc ON dlc.id_link = dl.id
  9. WHERE dl.id_category !=333
  10. AND dl.STATUS = 'active'
  11. GROUP BY dl.id
  12. ORDER BY dl.fecha_de_alta DESC
  13. LIMIT 10
  14. )t1 ON dl.id = t1.id
  15. INNER JOIN dir_link_clicks dlc ON dlc.id_link = dl.id
  16. GROUP BY dlc.id_link
  17. ORDER BY dl.fecha_de_alta DESC

Por el rank
Código sql:
Ver original
  1. SELECT dl.title, dl.location, dl.url, dl.rank, dl.fecha_de_alta, dl.description, dc.path, COUNT( dlc.id_link ) totallinks, t2.totcom
  2. FROM dir_links dl INNER JOIN dir_categories dc ON dl.id_category = dc.id
  3. INNER JOIN (  SELECT dl.id FROM `dir_links` dl WHERE dl.id_category !=333 AND dl.STATUS = 'active' ORDER BY rank DESC LIMIT 10 )t1 ON dl.id = t1.id
  4. INNER JOIN (SELECT dlco.id_link AS id, COUNT(dlco.id_link) totcom FROM dir_link_comments dlco GROUP BY dlco.id_link)T2 ON T1.id = t2.id
  5. INNER JOIN dir_link_clicks dlc ON dlc.id_link = dl.id GROUP BY dlc.id_link ORDER BY dl.rank DESC , totallinks DESC

Cuando es por clicks
Código sql:
Ver original
  1. SELECT dl.title, dl.location, dl.url, dl.rank, dl.fecha_de_alta, dl.description, dc.path, dl.STATUS, t1.tot AS totallinks, t2.totcom
  2. FROM dir_links dl
  3. INNER JOIN dir_categories dc ON dl.id_category = dc.id
  4. INNER JOIN (
  5.  
  6. SELECT dl2.id, COUNT( dlc.id_link ) AS tot
  7. FROM `dir_links` dl2
  8. INNER JOIN dir_link_clicks dlc ON dl2.id = dlc.id_link
  9. WHERE dl2.id_category !=333
  10. AND dl2.STATUS = 'active'
  11. GROUP BY dlc.id_link
  12. ORDER BY tot DESC
  13. )t1 ON dl.id = t1.id
  14. INNER JOIN (
  15.  
  16. SELECT dlco.id_link AS id, COUNT( dlco.id_link ) AS totcom
  17. FROM dir_link_comments dlco
  18. GROUP BY dlco.id_link
  19. )t2 ON t1.id = t2.id
  20. ORDER BY totallinks DESC , dl.rank DESC

Última edición por jurena; 26/10/2008 a las 10:09