2010-08-19 3 views
-1

J'essaye d'interroger 2 tables dans une base de données, chaque requête n'ayant rien à faire l'une avec l'autre, d'autres étant alors sur la même page.PHP MySql requête 2 tables qui n'ont pas d'attributs communs en même temps?

Requête 1 - La première requête sur la page récupérera le texte et les images qui se trouvent dans toute la page du tableau A.

Requête 2 - La deuxième requête récupérera plusieurs produits avec une image, la description et le titre de chaque produit de la table B.

Je sais que mettre la deuxième requête à l'intérieur de la première boucle while de la requête fonctionnerait bien sûr très inefficace.

Comment puis-je et quel est le meilleur moyen de récupérer toutes les données dont j'ai besoin à travers 1 requête?

Merci,

  • Dane
+2

Et pourquoi exécuteriez-vous la requête 2 à l'intérieur de la boucle pour la requête 1 s'ils ne sont pas liés? – ircmaxell

+0

ircmaxell - ne pas avoir 2 requêtes sur la même page inefficace? – teamdane

+0

Je préfère avoir 2 requêtes simples que 1 requête trop complexe. Tant du point de vue de la maintenabilité que du point de vue de la performance. Moins n'est pas toujours mieux ... – ircmaxell

Répondre

3

Donc, tout ce que vous voulez savoir est si son ok pour avoir 2 requêtes sur la même page? C'est A-OK. Allez-y. C'est complètement normal. Personne ne s'attend à une jointure entre les nouvelles de table et les produits de table. Il est normal d'utiliser deux requêtes pour récupérer des données à partir de deux tables non liées.

+0

Ils ne sont pas liés, donc c'est bien d'avoir 2 requêtes sur la même page? – teamdane

0

Utilisez GAUCHE ou INNER JOIN (dépend si vous voulez afficher les enregistrements de TableA qui ont aucun enregistrement correspondant à TableB)

SELECT a.*, b.* 
FROM TableA a 
[LEFT or INNER] JOIN TableB b ON (b.a_id = a.id) 
+0

J'ai besoin de tous les enregistrements de la table A et de tous les enregistrements de la table B. Il n'y a pas d'identifiant pour les joindre, aucune colonne n'est liée. – teamdane

+0

Dans ce cas, j'aurais 2 requêtes indépendantes. – a1ex07

0

S'il n'y a aucun moyen de relier les deux tables à l'autre, alors vous ne peut pas utiliser JOIN pour récupérer des enregistrements des deux. Vous pouvez utiliser une requête UNION, mais cela suppose que vous pouvez faire correspondre les champs de chaque table, comme UNION vous oblige à sélectionner le même nombre/type de champs de chaque table.

SELECT 'pageinfo' AS sourcetable, page.id, page.images, page.this, page.that 
WHERE page.id = $id 

UNION 

SELECT 'product' AS sourcetable, products.id, products.image, product.other, product.stuff 

Mais c'est très moche. Vous forcez toujours le serveur de base de données à effectuer deux requêtes en arrière-plan, plus le travail supplémentaire de les combiner en un ensemble de résultats unique, et vous devez ensuite effectuer un travail supplémentaire pour désintroduire votre code pour démarrer.

Il est BEAUCOUP PLUS FACILE, du point de vue conceptuel et de la maintenance, de faire deux requêtes distinctes à la place. Pourquoi les combiner si elles ne sont pas apparentées?

Questions connexes