LIKE inversé + CONCAT en SQL
Posted on February 24, 2008
Filed Under Développement, PHP | Leave a Comment
On connait tous la syntaxe LIKE classique permettant de rechercher un pattern dans une une chaine de caractères stockée dans une table. Par exemple, pour rechercher toutes les lignes contenant le mot-clé ‘lapin‘ dans le champ description, on pourrait écrire la requête suivante :
SELECT description FROM foo WHERE description LIKE ‘%lapin%’
En revanche, une utilisation plus rare de LIKE est parfois très utile. Imaginons qu’on veuille rechercher toutes les personnes dont le nom est cité dans un texte. On peut donc utiliser LIKE de façon inversée :
SELECT id, nom, prenom FROM utilisateur WHERE ‘$texte‘ LIKE CONCAT(’%', nom, ‘%’)
La variable PHP $texte doit contenir le texte dans lequel la recherche doit se faire.
Attention toutefois car cette requête, indépendamment de vos éventuels indexes provoquera un fullscan sur la table.
L’autre utilisation de ce type de requete pourrait être la recherche d’un prefixe dans un numéro de téléphone :
SELECT * FROM prefixes WHERE ‘$phoneNumber’ LIKE CONCAT( prefix, ‘%’)
Voila, cette découverte m’a été bien utile, j’espère qu’elle pourrait l’être également pour ceux qui lirons ces lignes.
La Peste - Albert Camus
Posted on December 28, 2007
Filed Under Livres | Leave a Comment
Je viens de terminer la relecture de ce roman. L’intrigue se passe à Oran, ville d’Algérie Française, dans les années 40. Il raconte l’histoire de plusieurs personnages lors d’une épidémie de peste dans cette ville où ils sont enfermés pour cause de la maladie.
Outre la représentation allégorique du nazisme (peste brune), j’ai surtout adoré le style. Précis, beau, ce livre contient une multitude de belle phrases incisives sur la condition humaine, l’isolement, la liberté.
A lire et à relire !
Comment faire un moteur de recherche avec Drupal
Posted on December 13, 2007
Filed Under Drupal, Développement, PHP | Leave a Comment
En activant le module Core Search de Drupal et en utilisant l’affichage par defaut on a du mal a obtenir un resultat correct. Je propose donc une solution simplissime qui fonctionne très bien.
Il faut biensur activer le module Search dans Drupal. (Admin > Site Building > Modules). Ensuite il faut aller dans les settings pour lancer l’indexation du site. Attention, une fois demandée, l’indexation n’est pas immédiate. Lancez la cron manuellement pour avoir un résultat immédiat (/admin/logs/status/run-cron).
Créez maintenant un node qui vous servira de page de résultat du formulaire de recherche. Disons, ce sera node/111. Ajouter dans votre formulaire de recherche l’input texte nommé “query“.
Créez un template pour le node 111, pour cela nommez le node-111.tpl.php. Par defaut, le systeme de templates de Drupal ne chargera pas la page du node 111. Pour que la page soit chargée, rajoutez dans le template.php :
function _phptemplate_variables($hook, $vars = array()) {
switch ($hook) {
case 'node':
$vars['template_files'] = array('node-'. $vars['nid']);
break;
}
return $vars;
}
Dans le tempate node-111.tpl.php rajoutez le code suivant :
$allNodes = array(); //Initialisation de l'array
if(isset($_GET["query"]) && strlen($_GET["query"]) > 3) { //Les keywords doivent comporter au moins 3 caracteres
$allNodes = do_search($_GET[”query”], “node”);
}
foreach($allNodes as $searchResult){
print node_view(node_load($searchResult->sid)); //Affichage de tous les nodes résultant de la recherche
}
Créer des thumbnails avec un fond
Posted on November 25, 2007
Filed Under Développement, PHP | 2 Comments
Il est très souvent nécessaire de créer des imagettes de taille fixe à partir d’images originales de toutes tailles. Prenez par exemple cette image d’un hotel. La partie en rose represente la forme du thumbnail qu’on voudrait obtenir. Le ratio (hauteur de l’image sur la largeur) des deux ne corréspondent pas. Il y a deux manieres de faire soit on étire l’image originale pour garger la totalité du contenu soit on coupe dedans pour garder les propotions.
Par ailleurs on voudrait mélanger l’image originale avec un fond spécial, ici une image d’un player vidéo.
Pour ce faire on va utiliser PHP5 avec la librairie GD.
Commencons par écrire un petit calcul qui nous permet d’obtenir la taille de la zone rose sur l’image originale. Cette zone rose a la particularité d’avoir le même ratio que le thumbnail qu’on veut obtenir.
/*recuperation de la taille originale de l'image (nom du fichier de l'image originale stocké dans $filename)*/
list($width, $height) = getimagesize($fileName);
/*on calcule le ratio du thumbnail demandé */
$thumbRatio = $thumbH / $thumbW;
/*on calcule le ratio de l'image originale */
$picRatio = $height / $width;
$cropWidth = $width;
$cropHeight = $height;
$topLeftX = 0;
$topLeftY = 0;
/*calcul de la zone rose */
if($thumbRatio > $picRatio) {
$cropHeight = $height;
$cropWidth = $height / $thumbRatio;
} else {
$cropWidth = $width;
$cropHeight = $width * $thumbRatio;
}
//Positionnement de la zone rose dans l'image originale
$topLeftX = ($width - $cropWidth) / 2;
$topLeftY = ($height - $cropHeight) / 2;
A ce niveau nous connaissons comment découper l’image originale (topLeftX, topLeftY, cropWidth, cropHeight) pour qu’une fois reduit aux dimensions de la thumb demandée le résultat ne soit pas étiré et englobe le maximum du contenu original.
Streamwide s’introduit sur Alternext !
Posted on November 11, 2007
Filed Under StreamWIDE, Télécoms | Leave a Comment
Voilà presque 3 ans que je travaille chez StreamWIDE. Le 22 novembre prochain StreamWIDE va s’introduire sur Alternext. La fourchette est comprise entre 14,92 € à 17,34 € (soit 16,13 € en milieu de fourchette).
Pour 2008 on prévoit un résultat net de 2,61 millions d’euros pour un chiffre d’affaires de 14,1 millions d’euros.
Tout le monde est très impatient de découvrir enfin les petites courbes grimpantes sur boursorama, surtout que la plupart des salariés ont investi dans cette IPO.
Silence, I’ll Kill You ! (Ahmed, the dead terrorist)
Posted on October 11, 2007
Filed Under Vidéos | Leave a Comment
Bug de AUTOINCREMENT, InnoDB et le partitionnement dans MySQL 5
Posted on October 10, 2007
Filed Under Développement | Leave a Comment
J’ai demandé aujourd’hui à ce qu’on teste un de nos produits avec l’une des dernières versions de MySQL. Ce qui m’interessait tout particulierement était le support du partitionnement par MySQL 5. En effet le produit en question possède des tables de plusieurs dizaines de millions de lignes et le partitionnement est tout à fait adéquat.
On lance un bench et très vite nous nous aprecevons des dizaines d’erreurs dans nos logs : problème de duplication de cléfs primaires… qui sont en “autoincrement”.
Voici les erreurs que je voyait passer : Can’t write; duplicate key in table ‘content_test’
Le truc étrange c’est que toutes les lignes n’étaient pas refusées. En fait le problème était plus flagrant quand le nombre de threads écrivant dans la table augmentait. Après un bon quart d’heure de Googling : http://bugs.mysql.com/bug.php?id=27405
Voici donc le bug fixé dans la 5.1.23. Je vais donc pour télécharger cette version : http://dev.mysql.com/downloads/mysql/5.1.html Problème, seule la version 5.1.22 est disponible pour le téléchargement, pas le temps de recompiler, MySQL à partir du trunk. Je passe donc les tables qui me génaient sur MyISAM.


