8768 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai besoin de vos lumières svp sur une requête dont il faut que j'intègre une condition :
Il faut que je rajoute "Si au moins un champ verify est égal à 0".

Simple à dire, mais à faire ...
En fait je recherche le nom des tables suivant certains critères, il y a deux requêtes possibles pour obtenir le même résultat, je vous laisse donc le choix pour ajouter la condition (Si au moins un champ verify est égal à 0)

pour comprendre voici un exemple de table dans la bdd:

Nom de la table : link_url1
-------------------
id | verify |
-------------------
0 | 0 |
1 | 1 |
2 | 1 |
3 | 0 |

1ère requête possible, qui cherche si les tables ont la colonne verify auquel il faudra rajouter la fameuse condition (si verify = 0 de la table TABLE_NAME)
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE 'verify'


2ème requête possible, qui recherche les tables commençants par link_ auquel il faudra rajouter la fameuse condition (si verify = 0 de la table TABLE_NAME)
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'link_%'


Merci d'avance pour vos réponses ! Smiley cligne
Hello...

Je comprend pas bien le problème...
Si tu dois juste savoir qu'un champs verify est = 0
bah t'as qu'a faire un where verify =0 Smiley smile
SI ça retourne quelque chose c'est que au moins UN champs verify est à 0 Smiley lol
c'est enfantin ou alors y a un truc que j'ai pas compris
Bonjour.

Apparemment, hooups veut faire la recherche sur toutes les tables de sa base de données...

Smiley smile

Edit : je ne connais pas vraiment information_schema, je ne saurais dire...
Modifié par Zelena (07 Apr 2017 - 18:10)
Effectivement Zelena c'est bien l'idée.

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'link_%' ;


Il faut en gros que je rajoute

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'link_%' AND TABLE_NAME.verify = 0;


Mais cette formule ne fonctionne pas Smiley biggol et je n'ai pas assez de connaissance sur SQL, c'est pour cela que je vous demande de l'aide Smiley cligne
Modifié par hooups (08 Apr 2017 - 07:13)
Bonjour.

Dans 'information_schema' de MySQL, il y a aussi 'COLUMNS' qui rassemble le nom des bases de données, des tables et des colonnes...

Mais le problème est d'avoir accès aux valeurs et à mon avis, ce n'est pas dans 'information_schema' (où il n'y a que des définitions) que vous l'aurez mais dans la base de données.

Peut-être avec une sous-requête Smiley confus ... désolée, je n'ai pas l'habitude de faire des recherches sur plusieurs tables sauf à faire des jointures...

Smiley smile
Modifié par Zelena (08 Apr 2017 - 09:18)
Bonsoir hooups, tu peux faire une fonction ou une procédure stockée comme ci-dessous mais je vois pas comment le faire en une requête:

DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `rechercheverify`()
BEGIN

  DECLARE nomTable CHAR(32);
  DECLARE cur1 CURSOR FOR 
  SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS
  WHERE COLUMN_NAME LIKE 'verify';
  OPEN cur1;
  read_loop: LOOP
    FETCH cur1 INTO nomTable;
    BEGIN
		SET @tblname=nomTable;
		SET @sql = CONCAT("select *,'",@tblname,"' as nomtable from " , @tblname," where verify=0");
		PREPARE stmt FROM @sql ;
		EXECUTE stmt ;
		DEALLOCATE PREPARE stmt ;
	END;
  END LOOP;
  
END$$
DELIMITER ;