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


Djoule_logo
WRInaute impliqué
WRInaute impliqué
 
Messages: 718
Inscription: 30 Mai 2007

[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: 6469
Inscription: 13 Juin 2005

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 impliqué
WRInaute impliqué
 
Messages: 718
Inscription: 30 Mai 2007

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: 3835
Inscription: 14 Sep 2006

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 impliqué
WRInaute impliqué
 
Messages: 718
Inscription: 30 Mai 2007

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: 3835
Inscription: 14 Sep 2006

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 impliqué
WRInaute impliqué
 
Messages: 718
Inscription: 30 Mai 2007

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: 3835
Inscription: 14 Sep 2006

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 impliqué
WRInaute impliqué
 
Messages: 718
Inscription: 30 Mai 2007

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: 3835
Inscription: 14 Sep 2006

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 impliqué
WRInaute impliqué
 
Messages: 718
Inscription: 30 Mai 2007

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: 3835
Inscription: 14 Sep 2006

Message le Mer Aoû 20, 2008 21:30

En effet, ben bonne continuation.


Djoule_logo
WRInaute impliqué
WRInaute impliqué
 
Messages: 718
Inscription: 30 Mai 2007

Message le Mer Aoû 20, 2008 21:33

Merci à toi pour ton aide.


Djoule_logo
WRInaute impliqué
WRInaute impliqué
 
Messages: 718
Inscription: 30 Mai 2007

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 passionné
WRInaute passionné
 
Messages: 1290
Inscription: 26 Fév 2004

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

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

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