Requête SQL
Elodette
-
Elodette -
Elodette -
Bonjour,
J'ai une requête qui affiche logiquement ce qu'elle doit afficher ^^ mais je voudrais la modifier pour avoir ce que je souhaite!
En effet, la requête renvoie les résultats, mais que si la table est rempli, hors je voudrais que même si la table est vide, un résultat s'affiche.
Les tables sont constitués ainsi :
service => logiciel => machine => machine_robot => robot
--------- => imprimante
------------------------------------------ =>peripherique
J'ai essayé de schématiser au mieux les tables, les "=>" représentant les liens!
Pour le moment,la requête n'affiche QUE les résultats qui ont tout rempli, c'est à dire les 7 tables. Et je voudrais que par exemple, la table service s'affiche, même si le reste des tables est vide!
Voici maintenant la requête, attention ne partez pas en courant ^^ :
SELECT service.nom AS NomService,
service.ChefDeService,
service.tel,
logiciel.nom AS NomLogiciel,
logiciel.version,
machine.marque AS MarqueMach,
machine.modele AS ModeleMach,
machine.marqueProcesseur,
machine.modeleProcesseur,
machine.RAM,
machine.HDD,
machine.OS,
machine.numeroDeSerie AS NDSMach,
machine.dateDeMAJ,
machine.machineNonMS,
machine.commentaire,
imprimante.marque AS MarqueImpr,
imprimante.modele AS ModeleImpr,
imprimante.numeroDeSerie AS NDSImpr,
robot.marque AS MarqueRob,
robot.modele AS ModeleRob,
robot.numeroDeSerie AS NDSRob,
peripherique.type,
peripherique.marque AS MarquePeriph,
peripherique.modele AS ModelePeriph,
peripherique.numeroDeSerie AS NDSPeriph,
peripherique.description
FROM service,
logiciel,
machine,
imprimante,
machine_robot,
robot,
peripherique
WHERE idSite='$idSite'
AND service.idService = logiciel.idService
AND logiciel.idMachine = machine.idMachine
AND service.idService = imprimante.idService
AND machine.idMachine = machine_robot.idMachine
AND machine_robot.idRobot = robot.idRobot
AND machine.idMachine = peripherique.idMachine
J'ai une requête qui affiche logiquement ce qu'elle doit afficher ^^ mais je voudrais la modifier pour avoir ce que je souhaite!
En effet, la requête renvoie les résultats, mais que si la table est rempli, hors je voudrais que même si la table est vide, un résultat s'affiche.
Les tables sont constitués ainsi :
service => logiciel => machine => machine_robot => robot
--------- => imprimante
------------------------------------------ =>peripherique
J'ai essayé de schématiser au mieux les tables, les "=>" représentant les liens!
Pour le moment,la requête n'affiche QUE les résultats qui ont tout rempli, c'est à dire les 7 tables. Et je voudrais que par exemple, la table service s'affiche, même si le reste des tables est vide!
Voici maintenant la requête, attention ne partez pas en courant ^^ :
SELECT service.nom AS NomService,
service.ChefDeService,
service.tel,
logiciel.nom AS NomLogiciel,
logiciel.version,
machine.marque AS MarqueMach,
machine.modele AS ModeleMach,
machine.marqueProcesseur,
machine.modeleProcesseur,
machine.RAM,
machine.HDD,
machine.OS,
machine.numeroDeSerie AS NDSMach,
machine.dateDeMAJ,
machine.machineNonMS,
machine.commentaire,
imprimante.marque AS MarqueImpr,
imprimante.modele AS ModeleImpr,
imprimante.numeroDeSerie AS NDSImpr,
robot.marque AS MarqueRob,
robot.modele AS ModeleRob,
robot.numeroDeSerie AS NDSRob,
peripherique.type,
peripherique.marque AS MarquePeriph,
peripherique.modele AS ModelePeriph,
peripherique.numeroDeSerie AS NDSPeriph,
peripherique.description
FROM service,
logiciel,
machine,
imprimante,
machine_robot,
robot,
peripherique
WHERE idSite='$idSite'
AND service.idService = logiciel.idService
AND logiciel.idMachine = machine.idMachine
AND service.idService = imprimante.idService
AND machine.idMachine = machine_robot.idMachine
AND machine_robot.idRobot = robot.idRobot
AND machine.idMachine = peripherique.idMachine
A voir également:
- Requête SQL
- Logiciel sql - Télécharger - Bases de données
- Sql (+) - Forum Programmation
- Requête sql pour afficher uniquement les fleurs dont le prix est strictement inférieur à 10 euros - Forum calculatrices
- Cherche des haricot vendez les moi ✓ - Forum DS
- Sql lister les tables ✓ - Forum Programmation
7 réponses
Votre clause WHERE exprime bien qu'il faut que toutes les conditions soient remplies pour obtenir un résultat, c'est donc elle que vous devez modifier.
Si vous avez des champs à NULL et que cela engage des erreurs, vous pouvez utiliser ceci :
https://docs.microsoft.com/fr-fr/sql/t-sql/functions/isnull-transact-sql?redirectedfrom=MSDN&view=sql-server-ver15
Si vous avez des champs à NULL et que cela engage des erreurs, vous pouvez utiliser ceci :
https://docs.microsoft.com/fr-fr/sql/t-sql/functions/isnull-transact-sql?redirectedfrom=MSDN&view=sql-server-ver15
Elodette
Si j'ai bien compris "ISNULL", il faut que je le fasse pour tous les champs?
En fait j'ai peut être mal expliqué.
Voilà, alors en fait, la table robot ne peut pas exister si la table machine_robot n'existe pas, la table machine n'existe pas si logiciel n'existe pas, et ainsi de suite...
service => logiciel => machine => machine_robot => robot
--------- => imprimante
------------------------------------------ =>peripherique
Seulement, je voudrais afficher la table service, même si les autres tables n'existent pas pour le service en question, ou alors afficher les tables service et logiciel, même si les tables suivantes n'existent pas.
Voilà, alors en fait, la table robot ne peut pas exister si la table machine_robot n'existe pas, la table machine n'existe pas si logiciel n'existe pas, et ainsi de suite...
service => logiciel => machine => machine_robot => robot
--------- => imprimante
------------------------------------------ =>peripherique
Seulement, je voudrais afficher la table service, même si les autres tables n'existent pas pour le service en question, ou alors afficher les tables service et logiciel, même si les tables suivantes n'existent pas.
ben tout dépends de ce que tu compte faire comme programme aussi.
si tu veux afficher différents éléments, tu pourrais fair ça:
afficher les services
pour chaque service, affficher les logiciels
pour chaque logiciel, afficher les machines
etc...
bon certes au lieu de faire une seule requête ça en fait plsusieurs, mais ça devient très modulable.
et ça peut te renvoyer un tableau comme ça
par contre j'ai une question,
tu as plusieurs tables 'logiciels': une par service, ou alors tu as une seule table logiciel qui référence le service avec une clé étrangère.
si tu veux afficher différents éléments, tu pourrais fair ça:
afficher les services
pour chaque service, affficher les logiciels
pour chaque logiciel, afficher les machines
etc...
bon certes au lieu de faire une seule requête ça en fait plsusieurs, mais ça devient très modulable.
et ça peut te renvoyer un tableau comme ça
service1 |--logicielA |--logicielB | |--machine11 service2 service3 |--logiciel34 | |--machinepouic | | |--Robogrillepain | |--machinekikoo | | |--RoboNono
par contre j'ai une question,
tu as plusieurs tables 'logiciels': une par service, ou alors tu as une seule table logiciel qui référence le service avec une clé étrangère.
Oui c'est comme cela que je souhaite faire avec une espèce d'arborescence.
Cependant j'ai pensé qu'une seule requête serait plus simple, car je n'aurai plus qu'à afficher les résultats de la requête, et ce de la manière dont je souhaite? Sinon il faudrait que je fasse plein de boucle de partout, un grand bazar quoi :s
Cependant j'ai pensé qu'une seule requête serait plus simple, car je n'aurai plus qu'à afficher les résultats de la requête, et ce de la manière dont je souhaite? Sinon il faudrait que je fasse plein de boucle de partout, un grand bazar quoi :s
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
parfait , ben moi je serais toi j'irais me taper les boucles, certes c'est long, mais ça t'évitera d'avoir un tableau avec pelin de cases vides, ou au contraire plein de cases avec le même nom de service qui se répète en début de ligne pour chaque différent robot a droite de la ligne..
ben
$sql="SELECT * FROM services";
$rs=mysql_query($sql, $ta_connection);
while($ligne=mysql_fetch_assoc($rs))
{
// ici tu affiches les données du service
$sql2="SELECT * FROM logiciels WHERE numéro_service ='"$ligne["numero_service"]."'";
$rs2=$rs=mysql_query($sql2, $ta_connection);
while($ligne2=mysql_fetch_assoc($rs2))
{
// ici tu affices les données du logiciel
// et aisi de suit, ici select * from machines where numero_logiciel = $ligne2["numero_logiciel"]
}
}