Site web perso et modification de freeware : SQL ok ? (PHP+SQL)

Site web perso et modification de freeware : SQL ok ? (PHP+SQL) - SQL/NoSQL - Programmation

Marsh Posté le 16-11-2005 à 11:38:07    

J'utilise un outil somme toute assez bien fait pour afficher mes photos dans mon site web.
Les photos sont associées à des catégories, et une photo peut être présente dans plusieurs catégories. Pour un exemple, allez voir dans ma signature.
 
Mon problème est que par défaut il trie selon la date en décroissant, et d'autres critères...
 
config.inc.php

Code :
  1. $conf['order_by'] = ' ORDER BY date_available DESC, file ASC, id ASC';


 
En fait tout est stocké dans deux tables :

phpwebgallery_images
====================
id (key)
file
date
comments
author
....


 
et
 

phpwebgallery_images_category
=============================
image_id (key)
category_id (key)


 
(phpwebgallery_images_category.image_id et phpwebgallery_images.id désignent la même chose, un numéro de photo)
Au niveau de l'affichage il va faire la requête suivante :
 

Code :
  1. $query = '
  2. SELECT DISTINCT(id)
  3.   FROM '.IMAGES_TABLE.'
  4.     INNER JOIN '.IMAGE_CATEGORY_TABLE.' AS ic ON id = ic.image_id
  5.   '.$page['where'].'
  6.   '.$conf['order_by'].'
  7. ;';
  8. $result = pwg_query( $query );


 
IDEE de modification :
 

  • Ajouter une colonne rank_id dans phpwebgallery_images_category
  • Modifier le tri dans le config.inc.php pour faire le tri sur rank_id


Mes questions sont ?

  • C'est ok ?
  • Le comportement du order by pour les rank_id qui resteront à null dans les catégories où je m'en fous un peu de l'ordre fonctionne comment ? Il garde les enregistrement dans l'ordre de ceux trouvés en fetchant la table ?


Merci d'avance :jap:


Message édité par Toxin le 16-11-2005 à 11:43:29

---------------
"If you can walk away from a landing, it's a good landing. If you use the airplane the next day, it's an outstanding landing." - Chuck Yeager. | Chaîne YT | Photos
Reply

Marsh Posté le 16-11-2005 à 11:38:07   

Reply

Marsh Posté le 16-11-2005 à 11:40:43    

[:fing fang fung]
 
j'ai fait que de la programation en Qbasic désolé :|

Reply

Marsh Posté le 16-11-2005 à 11:47:59    

Ben tu as qu'a foutre 0 en valeur par défaut pour le Rank_id et hop c'est réglé.


Message édité par Caleb2000 le 16-11-2005 à 11:48:04

---------------
Fucking Hostile •/ Bust up, Tune down, Sabb off... / Dead Sex on my tongue
Reply

Marsh Posté le 16-11-2005 à 11:50:50    

Question bonux de syntaxe SQL :
 
SELECT DISTINCT(id)
  FROM '.IMAGES_TABLE.'
    INNER JOIN '.IMAGE_CATEGORY_TABLE.' AS ic ON id = ic.image_id
  '.$page['where'].'
  '.$conf['order_by'].'
 
Devient en remplaçant les variables qui m'intéressent  
 
SELECT DISTINCT(id)
  FROM phpwebgallery_images  
    INNER JOIN phpwebgallery_images_category  AS ic ON id = ic.image_id
  '.$page['where'].'
  ORDER BY rank_id, ..... ;
 
Est-ce que c'est correct de faire comme ceci, ou dois-je soit ajouter phpwebgallery_images_category dans le FROM soit mettre ic.rank_id si l'alias défini dans le inner join a une portée sur toute la requête ?
 
 


---------------
"If you can walk away from a landing, it's a good landing. If you use the airplane the next day, it's an outstanding landing." - Chuck Yeager. | Chaîne YT | Photos
Reply

Marsh Posté le 16-11-2005 à 11:54:27    

A moins que INNER JOIN soit une option de FROM :D


---------------
"If you can walk away from a landing, it's a good landing. If you use the airplane the next day, it's an outstanding landing." - Chuck Yeager. | Chaîne YT | Photos
Reply

Marsh Posté le 16-11-2005 à 12:32:18    

elle y est dejà dans le FROM. On applique une jointure interne (INNER JOIN) de phpwebgallery_images sur phpwebgallery_images_category si la condition id = ic.image_id est respectée.


---------------
MZP est de retour
Reply

Marsh Posté le 16-11-2005 à 12:35:51    

beuah j'aime pas les inner join...
 
SELECT DISTINCT(id)
  FROM phpwebgallery_images,  phpwebgallery_images_category  AS ic where  id = ic.image_id
  '.$page['where'].'
  ORDER BY rank_id, .....
 
si tu veux pas t'emmerder tu fais dans ton select un nvl(rank_id, unEntier) rank_id  comme ca pas besoin de t'occuper des valeurs nulles

Reply

Marsh Posté le 16-11-2005 à 13:58:34    

on sent l'utilisateur d'Oracle. Dommage pour le INNER JOIN, c'est tout de meme la norme ;)


---------------
MZP est de retour
Reply

Marsh Posté le 16-11-2005 à 14:33:14    

oué mais pour les petites requetes je preferes la syntaxe oracle :D

Reply

Marsh Posté le 16-11-2005 à 14:51:41    

c'est une question d'habitudes. Je prefere separer les conditions de jointures de la clause WHERE.


---------------
MZP est de retour
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed