[mysql] Chercher une ligne, si elle existe pas on prend une autre

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [mysql] Chercher une ligne, si elle existe pas on prend une autre

par Rem73 » 19 avr. 2009, 19:23

Merci à toi orgerix parce que je suis en mode chipotage en ce moment :lol:

Donc cette méthode est la plus rapide ?


Faudrais que j'aille m'acheter un bouquin sur mysql parce que sinon dans pas longtemps je serais chauve :lol:

par orgerix » 19 avr. 2009, 19:20

PLutot qu'utiliser un OR, assez gourmand, c'est (légèrement) mieux d'utiliser IN

Code : Tout sélectionner

SELECT * FROM tuks_theme WHERE id IN( **thème de l'utilisateur** , **thème par défaut**) ORDER BY id DESC LIMIT 1
Mais bon, c'est vrai que c'est du chipotage.

par Rem73 » 19 avr. 2009, 19:17

Ce qui donnerais ce code là :

Code : Tout sélectionner

SELECT * FROM tuks_theme WHERE id = **thème de l'utilisateur** OR id= **thème par défaut** ORDER BY id DESC LIMIT 1
Celà fonctionne très bien cependant ça me parait quand même du bricolage, mais je pense que c'est aussi la façon la plus rapide.

Moi je cherchait du côter de IF EXIST mais j'ai trouver trop peu d'information sur cette "fonction" (je sais pas quel mot on utilise pour désigner de genre de choses).


Merci à toi

par jojolapine » 19 avr. 2009, 19:07

Peut-être avec quelque chose comme ça....:

Code : Tout sélectionner

SELECT * FROM tuks_theme WHERE id = **thème de l'utilisateur** OR id= **thème par défaut** LIMIT 1
Après je ne sais pas comment mysql gère la condition en "ou", si il cherche d'abord la première partie, ou si e premier enregistrement qui rempli l'une ou l'autre condition est retenu...
Dans le cas de la deuxième hypothèse, il te faudra rajouter un "ordre" à ta table afin que le thème par défaut soit le premier (ou le dernier) et tu rajoutes un ORDER BY à ta requête et ça devrait le faire je pense...
à tester ;)

[mysql] Chercher une ligne, si elle existe pas on prend une

par Rem73 » 19 avr. 2009, 18:15

Bonjour,

Je suit en train de développer un système pour gérer différent thème.

Je cherche donc toutes les informations qui sont dans la base de donnée à propos du thème choisi.
Cependant si mysql ne trouve rien je voudrais qu'il aille récupérer à la place le thème par défaut.

J'ai donc fait fait ces deux requettes :

Code : Tout sélectionner

SELECT * FROM tuks_theme WHERE id = **thème de l'utilisateur**
Et si cette première requette revoir rien je fait

Code : Tout sélectionner

SELECT * FROM tuks_theme WHERE id = **thème par défaut***
Structure de la base de donnée :

Code : Tout sélectionner

-- -- Structure de la table `tuks_theme` -- CREATE TABLE IF NOT EXISTS `tuks_theme` ( `id` tinyint(3) unsigned NOT NULL auto_increment, `nom` varchar(20) NOT NULL, `repertoire` varchar(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; -- -- Contenu de la table `tuks_theme` -- INSERT INTO `tuks_theme` (`id`, `nom`, `repertoire`) VALUES (1, 'Tuks Alpha 0.0.3', 'Tuks_0.0.3');
Cependant je voudrais faire tenir ça en une seul requête SQL.


Je sais que je doit pas mettre de code PHP mais je le met pour clarifiée l'utilisation
$this->mysql_requete_sql('SELECT * FROM tuks_theme WHERE id = \''.$this->utilisateur('theme').'\'', 'information_utilisation_theme', FALSE, TRUE);
		$this->donnee_theme_utilisateur = $this->mysql_associatif_resultat('information_utilisation_theme', TRUE);
		$this->mysql_liberer_resultat('information_utilisation_theme', TRUE);
		// Si le thème existe pas on prend celui par défaut
		if ( empty($this->donnee_theme_utilisateur['id']) )
		{
			$this->mysql_requete_sql('SELECT * FROM tuks_theme WHERE id = \''.THEME_DEFAUT.'\'', 'information_utilisation_theme_defaut', FALSE, TRUE);
			$this->donnee_theme_utilisateur = $this->mysql_associatif_resultat('information_utilisation_theme_defaut', TRUE);
			$this->mysql_liberer_resultat('information_utilisation_theme_defaut', TRUE);
			$this->erreur_theme_inexistant($this->utilisateur('theme'));
		}
Merci d'avance