Question

Je construis un flux RSS en PHP qui utilise les données de trois tableaux distincts. Les tableaux font tous référence à des pages situées dans différentes zones du site. Le problème que j'ai est d'essayer de créer les champs de lien dans le XML. Sans savoir de quelle table provient chaque enregistrement, je ne peux pas créer le lien approprié.

Existe-t-il un moyen de résoudre ce problème? J'ai essayé d'utiliser mysql_fetch_field, mais cela a renvoyé des valeurs vides pour les tables.

$sql = "
SELECT Title FROM table1
UNION 
SELECT Title FROM table2
UNION 
SELECT Title FROM table3";

D'autres champs sont impliqués, mais il s'agit en gros de la requête que j'utilise.

Toute aide serait appréciée.

Merci.

Était-ce utile?

La solution

Devrait être assez facile, il suffit de faire quelque chose comme ceci:

$sql = "
SELECT Title, 1 FROM table1
UNION ALL
SELECT Title, 2 FROM table2
UNION ALL
SELECT Title, 3 FROM table3";

Autres conseils

Ajoutez simplement une constante à votre liste de colonnes comme suit:

select 'table1' as table_name, title from table1
union all
select 'table2' as table_name, title from table2
union all
select 'table3' as table_name, title from table3

qui vous donnera quelque chose comme:

table_name | title
-----------+-----------------------------
table1     | war and peace
table2     | 1984
table3     | terminator salvation

et ainsi de suite.

Cela vous permet d’avoir des types de données chaîne qui faciliteront probablement votre conversion en liens (surtout si vous utilisez des valeurs qui doivent simplement être copiées sur votre page au lieu d’être recherchées ou converties) et en utilisant comme La clause vous permettra de la référencer comme n'importe quelle autre colonne (par son nom).

Notez l'utilisation de union all - si vous êtes sûr qu'il n'y aura pas de lignes en double dans les tables (ce qui est probablement vrai dans ce cas puisque vous avez une valeur nom_table différente pour chacun et je suppose que les titres sont uniques), l'unité all peut éviter une opération de tri-duplication gaspillée. L'utilisation de union seule peut entraîner un travail inutile.

Si vous souhaitez supprimer les doublons, utilisez simplement union .

Ajoutez une colonne factice avec une valeur constante. Par exemple. "Sélectionnez 'funky_table' en tant que source_table, titre de funky_table " pour chaque clause mais avec des noms différents dans les guillemets.

la requête ci-dessous fonctionne mieux et vous donne une meilleure idée car les requêtes ci-dessus ne rendent pas les lignes deux fois.

SELECT t1.*,t1.table_name
FROM
t1
UNION ALL
SELECT t2.*,t2.table_name
FROM
t2
LEFT OUTER JOIN 
t1
ON t1.id=t2.id
WHERE t1.id=null

le script ci-dessus ne donne pas les lignes de données en double et assurez-vous

  1. Toutes les données communes bteween t1 et t2 en tant que table t1 source.
  2. La source des lignes non t2 est la table t1.
  3. La source des lignes non t1 est la table t2.

si vous voulez des données communes de la table t2, retournez jointure gauche

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top