[SQL]Verifier la presence d'une entrée dans plusieurs tables

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics


Djoule_logo
WRInaute passionné
WRInaute passionné
 
Messages: 712
Inscription: Mer Mai 30, 2007 0:21

[SQL]Verifier la presence d'une entrée dans plusieurs tables

Message le Mer Aoû 20, 2008 14:14

Bonjour à tous

Etant donné que je ne suis pas très doué en SQL, je me tourne vers vous pour ma requette.
Je souhaite verifier si une entrée existe dans au moins une de mes tables. Pour cela il faut donc que je les verifie toutes.
Quelqu'un connaitrait il la syntaxe (même approchante) de ce genre de requette?

Merci à vous


nickargall
WRInaute accro
WRInaute accro
 
Messages: 5335
Inscription: Lun Juin 13, 2005 14:13

Message le Mer Aoû 20, 2008 15:01

Code: Tout sélectionner
SELECT `id` FROM `table1` WHERE (( `id` IN (SELECT `id` FROM `table2`) OR ( `id` IN (SELECT `id` FROM `table3`) OR ( `id` IN (SELECT `id` FROM `table4`)) AND `id`=$tavaleur


ptet qu'un truc comme ça ... (non garanti) et sans doute un peu lourd ...


Djoule_logo
WRInaute passionné
WRInaute passionné
 
Messages: 712
Inscription: Mer Mai 30, 2007 0:21

Message le Mer Aoû 20, 2008 15:05

hmm, ça me semble effectivement un peu tordu et un peu lourd. J'ai vu dans la doc SQL qu'il y avait une commande MATCH. J'essaye de comprendre comment elle marche mais j'avoue que pour l'instant je nage.

Mais y'a peut être un truc a creuser de ce coté là.


YoyoS
WRInaute accro
WRInaute accro
 
Messages: 3062
Inscription: Jeu Sep 14, 2006 4:53

Message le Mer Aoû 20, 2008 17:48

La recherche full text n'a rien avoir avec ce que tu veux faire. La requête de nickargall ne devrait pas être trop lourde puisqu'elle ne travaille quasiment que sur des indexes.

Tu peux même faire que des count(*) à la place, ça ira encore plus vite.

Exemple:

Code: Tout sélectionner
select "found"
from (select count(*) as c1 from table1) as t1,(select count(*) as c2 from test2) as t2
WHERE c1 > 0 OR c2 > 0


Djoule_logo
WRInaute passionné
WRInaute passionné
 
Messages: 712
Inscription: Mer Mai 30, 2007 0:21

Message le Mer Aoû 20, 2008 19:40

Peux tu m'expliquer ta requette YoyoS ?
Quand je dis que je suis une brele :mrgreen:


YoyoS
WRInaute accro
WRInaute accro
 
Messages: 3062
Inscription: Jeu Sep 14, 2006 4:53

Message le Mer Aoû 20, 2008 19:48

:mrgreen:

Ca s'appelle une requête orthogonale. Ca veut dire que au lieu de faire un select from table, tu fais un select from (une résultat d'une table). Dans ce cas, je le fais sur deux résultats de tables comme si j'avais fait select * from table1,table2

J'affiche simplement found quand il trouve au moins 1 résultat dans la table t1 ou t2 grâce aux alias et aux conditions c1 > 0 OR c2 > 0

Donc quand tu fais ta requête, tu tests simplement si

if (mysql_fetch_assoc(mysql_query($requete)))
pour savoir s'il existe un résultat ou pas dans au moins une table.


Djoule_logo
WRInaute passionné
WRInaute passionné
 
Messages: 712
Inscription: Mer Mai 30, 2007 0:21

Message le Mer Aoû 20, 2008 20:00

Nickel, ça a l'air d'etre exactement ce dont j'ai besoin ;)

Donc en gros si je veux verifier la presence d'une variable, j'aurai c1=$ma_variable OR c2=$ma_variable ?


YoyoS
WRInaute accro
WRInaute accro
 
Messages: 3062
Inscription: Jeu Sep 14, 2006 4:53

Message le Mer Aoû 20, 2008 20:46

Eu non, moi j'ai compris ta question comme, existe-t-il une donnée (n'importe laquelle, j'ai compris un tuple) dans au moins une de mes tables ^^

Ça serait pour rechercher quoi ?

Surement un truc du genre:

Code: Tout sélectionner
select "found"
from (select count(*) as c1 from table1 where monchamp = $mavar) as t1,(select count(*) as c2 from test2 monchamp = $mavar) as t2
WHERE c1 > 0 OR c2 > 0


Djoule_logo
WRInaute passionné
WRInaute passionné
 
Messages: 712
Inscription: Mer Mai 30, 2007 0:21

Message le Mer Aoû 20, 2008 20:53

Ok, du coup ça me semble plus clair ;)

En fait je cherche à verifier l'existance de ma variable dans mes tables qui me génerent mes pages.

Pour l'instant si je passe dans l'url une variable non presente dans ma base, ça me genère tout de même une page, mais avec un grosse erreur php au milieu. Cette verif me permettrai de faire une petite 301 si la page demandé n'est pas "valide" ;)


YoyoS
WRInaute accro
WRInaute accro
 
Messages: 3062
Inscription: Jeu Sep 14, 2006 4:53

Message le Mer Aoû 20, 2008 20:54

Voui, ça devrait fonctionner ça non ? Tu saurais l'executer sur phpmyadmin pour voir le temps d'execution ? J'imagine que les champs à rechercher sont des "id" indexés ? Ca doit aller très vite tout ça !


Djoule_logo
WRInaute passionné
WRInaute passionné
 
Messages: 712
Inscription: Mer Mai 30, 2007 0:21

Message le Mer Aoû 20, 2008 21:07

Non justement ce ne sont pas des "id", mais mes bases ne sont pas lourdes (quelques centaines d'entrées au grand max). Je teste dans phpmyadmin pour voir le temps d'exe ;)

EDIT
apres test :

Affichage des enregistrements 0 - 0 (1 total, traitement: 0.0037 sec.)

ça va, c'est pas trop long :P


YoyoS
WRInaute accro
WRInaute accro
 
Messages: 3062
Inscription: Jeu Sep 14, 2006 4:53

Message le Mer Aoû 20, 2008 21:30

En effet, ben bonne continuation.


Djoule_logo
WRInaute passionné
WRInaute passionné
 
Messages: 712
Inscription: Mer Mai 30, 2007 0:21

Message le Mer Aoû 20, 2008 21:33

Merci à toi pour ton aide.


Djoule_logo
WRInaute passionné
WRInaute passionné
 
Messages: 712
Inscription: Mer Mai 30, 2007 0:21

Message le Mer Aoû 20, 2008 22:30

Je viens de mettre le script en place, ça fonctionne a merveille.
Par contre une question annexe. Si la page demandée n'existe pas, il vaut mieux une 301 vers la home, ou une 302 vers une page explicative ?


Bool
WRInaute accro
WRInaute accro
 
Messages: 1290
Inscription: Jeu Fév 26, 2004 15:59

Message le Mer Aoû 20, 2008 22:35

Djoule_logo a écrit:Si la page demandée n'existe pas, il vaut mieux une 301 vers la home, ou une 302 vers une page explicative ?


Je mettrais plutôt une 404 personnalisée (après tout, ça sert justement à ça), avec éventuellement une redirection "html" au bout de 30 secondes vers la home.

[SQL]Verifier la presence d'une entrée dans plusieurs tables

Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :

Consultez la description détaillée des produits ou services de Google suivants : Google Images, Google Feed Fetcher

  • Générateur de mots-clés
    Cet outil vous fournit une liste de mots sémantiquement proches du mot que vous fournissez en entrée. Il peut servir à vous donner des idées de mots à utiliser sur vos pages, voire de contenus à ajouter.
  • Voir la classe C de plusieurs sites
    Cet outil vous permet de vérifier si plusieurs sites sont hébergés sur la même classe C (adresse IP du serveur).
  • Analyse du positionnement dans Google
    Cet outil vous permet de vérifier si une ou plusieurs page(s) de votre site arrive(nt) dans les premiers résultats de Google, pour certains mots-clés recherchés.
  • Analyse du positionnement dans Yahoo
    Cet outil vous permet de vérifier si une ou plusieurs page(s) de votre site arrive(nt) dans les premiers résultats de Yahoo, pour certains mots-clés recherchés.


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités