IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[SQL] Requete sur plusieurs tables


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 55
    Points
    55
    Par défaut [SQL] Requete sur plusieurs tables
    Bonjour,

    Je suis en train de réaliser une requête sur plusieurs tables... J'aimerais chercher les 7 derniers enregistrements sur 2 tables, en mélangeant les deux tables (pour faire comme si s'en n'était qu'une seule, et je précise qu'elles ont les mêmes champs).

    Voilà donc ce que je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql_search_topics_forums = "SELECT id, sujet, auteur, date_dern, vu, nb_rep, forum FROM v2_forum1_sujets, v2_forum2_sujets ORDER BY date_dern DESC LIMIT 7";
    Et j'obtiens l'erreur :
    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/t/e/s/[etc.] on line 362

    Ligne 362 :
    $total_search_topics_forums = mysql_num_rows($req_search_topics_forums);


    J'en conclue donc que ma synthaxe est mauvaise (c'est la première fois que je fais une requete sur 2 tables

    Merci d'avance pour ceux qui me répondront.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    C'est que la requête (mysql_query) retourne FALSE car il y a une erreur. Rajoutez or die(mysql_error()); derrière l'appel à cette dernière.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    Par défaut déboguer facilement
    Et utilisez les jointures pour être sûr d'obtenir le résultat désiré.

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 55
    Points
    55
    Par défaut
    Erreur retournée : "Column 'id' in field list is ambiguous".

    Ok, comment utiliser les jointures dans mon cas ? (j'ai fait quelques essais, mais qui ne me donnent pas le résultat désiré (je le rapplle : qui est de faire ces deux tables comme s'il n'y en avait qu'une)).

  5. #5
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    Par défaut
    ouais ben t'aurais dû envoyer ton erreur dès le début.

    Cela signifie que tes deux tables on le même nom de champ chacune et que le moteur SQL ne sait pas lequel choisir parmi les deux tables. il faut que tu mettes le nom de la table en préfixe ou un alias du nom de la table

  6. #6
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 55
    Points
    55
    Par défaut
    Oui, mais tu ne m'aides pas beaucoup

    Je sais qu'il faut que je rajoute des préfixes, et j'ai d'ailleurs testé... Mais si je mets une des deux tables en préfixe, il ne cherchera que sur celle-ci, alors que j'ai absolument besoin qu'il prenne les deux en considération...

  7. #7
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    Par défaut donne les noms
    Parce que je ne peux pas t'aider plus par rapport à ce que tu me donnes comme information.

    Donne nous les noms des champs de tes tables et je vais te faire la requête. Dis aussi exactement ce que tu veux obtenir comme résultat car là, tu donnes trop peu d'indications pour qu'on t'aide

  8. #8
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    Par défaut envoi par mp
    Oublie mon post précédent. Il y a encore mieux si tes tables SQL ne sont pas trop grosses exporte les en fichier SQL et envoie moi le fichier par MP et je testerai ma requête avant de la poster sur le forum.

  9. #9
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 55
    Points
    55
    Par défaut
    J'ai essayé de la jouer à la précision pourtant

    Donc j'ai deux tables :
    v2_forum1_sujets et v2_forum2_sujets

    Ces deux tables sont exactements les mêmes sauf qu'elles ont des enregistrements différents (logique).
    Ces deux tables contiennent chacune les informations des sujets créés sur les 2 forums de mon site.

    La requete que j'essaye de faire est utilisée sur la page d'accueil du site, afin de lister les 7 derniers sujets actifs, les 2 forums mélangés (que le résultat s'affiche comme si on ne puisait que dans une table).

    Les différents champs que je veux récupérer sont (les mêmes noms de champs sur chacune des deux tables) :
    id,
    sujet,
    auteur,
    date_dern,
    vu,
    nb_rep,
    forum

    Et on ordonne par le champ : date_dern (qui contient une date et qui est également le même ds les deux tables)

    Voilà plus précis

    Est-ce que ça t'aide pour la compréhension ?

  10. #10
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    Par défaut
    Citation Envoyé par Emotion Voir le message
    J'ai essayé de la jouer à la précision pourtant
    J'en doute pas un instant

    Citation Envoyé par Emotion Voir le message
    Est-ce que ça t'aide pour la compréhension ?
    Parfaitement!!!

    Donc ta requête doit être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql_search_topics_forums = "SELECT f1.id, f2.id, sujet, auteur, date_dern, vu, nb_rep, forum FROM v2_forum1_sujets AS f1, v2_forum2_sujets AS f2 ORDER BY date_dern DESC LIMIT 7";
    Je n'ai pas testé vu que je n'ai pas tes tables mais tu as un exemple d'un préfixage sur l'id de chaque table. Il va sûrement falloir que tu le fasse pour toutes tes colonnes sinon la même erreur va être générée pour les noms de colonnes suivantes.

    Je me pose une question: Pourquoi deux tables différentes avec des champs identiques?? Il doit y avoir mauvaise conception quelque part.

  11. #11
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 55
    Points
    55
    Par défaut
    Non, pas d'erreur de conception : je fais un forum à ma façon, c'est tout

    http://testscolaire.ovh.org/vv2/fr/index.php
    > Le résultat est un peu spécial :

    J'ai arrangé ta requete comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql_search_topics_forums = "SELECT f1.id, f2.id, f1.sujet, f2.sujet, f1.auteur, f2.auteur, f1.date_dern, f2.date_dern, f1.vu, f2.vu, f1.nb_rep, f2.nb_rep, f1.forum, f2.forum FROM v2_forum1_sujets AS f1, v2_forum2_sujets AS f2 ORDER BY f1.date_dern, f2.date_dern DESC LIMIT 7";

  12. #12
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 55
    Points
    55
    Par défaut
    En fait il n'y a que 2 enregistrement dans la table v2_forum2_sujets et il retourne donc ces deux enregistrement en boucle. Il ne semble pas prendre la table v2_forum1_sujets en considération...

  13. #13
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    Par défaut
    Le fait que tu fasses un forum à ta façon ne signifie pas qu'il est exempt de toute erreur de conception. Il y a des règles très strictes à respecter pour la conception d'une base de données et il y a plein de tutoriels sur developpez.com qui les expliquent de façon très claire même pour un débutant.

    Je maintiens que deux tables identiques dans une même base de données est illogique quand on peut en faire une seule quitte à ajouter une colonne qui pourrait être nommé id_forum. Et cela simplifierai énormément ta requête de recherche pour ce que tu cherches à faire.

  14. #14
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Points : 55
    Points
    55
    Par défaut
    Je vois pas en quoi avoir plusieurs tables identiques posent un problème... A l'oeil c'est la même chose. Moi je suis un particulier : pour moi tant qu'il n'y a pas d'erreur affichées, c'est l'essentiel : c'est comme avec mon css... qu'il soit valide ou pas, j'en ai pas grand chose à faire, le principal est que l'ensemble graphique soit affiché comme je le souhaite

    Ca fait quatre ans que je gère des bases de données. Je pourrais faire un forum classique sans problème... Sauf que là je suis en train d'y ajouter des fonctions spéciales uniquement pour certains forums, d'où le fait que j'aie choisis une table pour un forum (et comme ça j'ai aussi un fichier php par forum, c'est peut-être plus lourd mais très pratique pour l'ajout de mes fonctions).

    Après pour la complication du script, pas d'idée ?

Discussions similaires

  1. Requete SQL complexe sur plusieurs tables
    Par vnk600 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 13/12/2009, 11h22
  2. [SQL] SQL Requete sur plusieurs tables/traitement particulier
    Par fluojet dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/02/2007, 19h59
  3. Réponses: 1
    Dernier message: 06/12/2006, 18h25
  4. requete sur plusieurs tables
    Par manaboko dans le forum Requêtes
    Réponses: 6
    Dernier message: 13/12/2005, 17h07
  5. [MS-SQL]requete sur 3 tables
    Par pascalT dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 30/04/2003, 11h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo