2010-02-28 6 views
2
<?php 
$sql = mysql_query(" 
SELECT navn FROM member_film WHERE username = '$pusername' 
UNION SELECT meetup FROM member_meetups WHERE byusername = '$pusername' 
UNION SELECT title FROM member_tutorials WHERE username = '$pusername'"); 
$rowit = mysql_fetch_array($sql); 
$number = mysql_num_rows($sql); 
?> 
<? echo $number; ?> 
<? echo $rowit["navn"]; ?><br> 
<? echo $rowit["meetup"]; ?><br> 

Donc, j'ai ceci. Maintenant, j'ai 3 colonnes où le nom d'utilisateur est nom d'utilisateur dans la base de données. 2 member_film, 1 member_meetupsecho à partir du UNION sql?

L'écho numéro de $, montre-il exact que j'ai 3.

Maintenant, quand je tente de faire écho à la « navn », il écho seulement 1, quand il y a 2 colonnes? Et quand j'essaye d'écho "meetup" il dit indéfini index: meetup, comme il n'y a rien à montrer .. mais il y a, mysql_num_rows l'a fondé, sinon cela aurait été 2?

Je pense que la plupart d'entre vous me avez mal compris .. Je veux montrer ce que l'utilisateur (pusername de $) ont été postés, dans member_film, member_meetups, member_tutorials .. Et si par exemple l'utilisateur a 2 colonnes avec son nom d'utilisateur, Je veux afficher le "navn" de la même colonne. Idem avec le titre sur member_tutorials, et meetup sur member_meetups.

Un exemple sur la façon dont je veux que ça ressemble à:

Vos messages: (. Qui, comme je veux, vérifie les trois tables s'il y a des colonnes avec le nom d'utilisateur de l'utilisateur dans la colonne « nom d'utilisateur »)

Ma nouvelle vidéo, son si bon (navn, qui est de member_film)

Mon meetup ennuyeux avec mes parents (titre, qui est de member_meetup)

Mon super vidéo! (navn, qui provient de member_film)

+0

Voulez-vous une union, c'est-à-dire un champ, ou voulez-vous une jointure, c'est-à-dire 3 champs? – AxelEckenberger

+0

Pouvez-vous s'il vous plaît poster un exemple de sortie (c'est-à-dire à quoi devrait ressembler le résultat), afin que nous puissions mieux comprendre votre problème. – AxelEckenberger

+0

OK s'il vous plaît voir ma question mise à jour – Karem

Répondre

2

UNION sélectionne, joint des instructions select dans 1 jeu de résultats, ont donc les mêmes noms de colonnes.

correcte SQL:

SELECT navn colName, 'member_film' tableName FROM member_film WHERE username = '$pusername' 
UNION SELECT meetup colName, 'member_meetups' tableName FROM member_meetups WHERE byusername = '$pusername' 
UNION SELECT title colName, 'member_tutorials' tableName FROM member_tutorials WHERE username = '$pusername'"); 

et dans le php:

<? echo $rowit["colName"]; ?><br> 

et pour savoir quelle table:

<? echo $rowit["tableName "]; ?><br> 
+0

Je ne sais pas si c'est ce que l'OP avait l'intention ... donc j'ai élaboré, voir ci-dessous. – AxelEckenberger

+0

Mais quand j'utilise $ rowit ["colName"] il n'affiche encore que 1 colonne sur 2 du fichier member_film, et ne montre pas non plus la colonne 1 de member_meetup? ce n'est pas la solution – Karem

1

Une requête syndicale combine les résultats de plusieurs requêtes en un jeu de résultats. Pour que l'union fonctionne toutes les sous-requêtes doivent retourner les champs avec les mêmes types de données pour chaque position de la requête ou chaque champ nommé.

Ainsi, votre requête d'origine donnera un ensemble de résultats avec un champ appelé "navn" (provenant de la première sous-requête de l'union). Donc, pour le rendre plus lisible, vous pouvez soit renommer le champ en utilisant As myName sur chacune des sous-requêtes (solution sam munkes).

Cependant, de la façon dont vous accédez à la requête, je crois que vous voulez avoir une ligne avec les 3 valeurs sur elle, alors vous devriez essayer d'utiliser cette place:

SELECT member_film, member_meetups.meetup, meber_tutorials.title 
FROM member_film, member_meetups, member_tutorials 
WHERE member_film.username = '$pusername' AND 
     member_film.username = member_meetups.byusername AND 
     member_film.username = member_tutorials.username 

Modifier après les commentaires:

SELECT CONVERT(varchar(100), navn) AS Comment FROM member_film WHERE username = '$pusername' 
UNION 
SELECT CONVERT(varchar(100), meetup) AS Comment FROM member_meetups WHERE byusername = '$pusername' 
UNION 
SELECT CONVERT(varchar(100), title) AS Comment FROM member_tutorials WHERE username = '$pusername' 

Ceci devrait maintenant donner une table ayant une colonne nommée 'comment' et étant de type varchar (100). Vous pouvez maintenant accéder à toutes les valeurs via la colonne des commentaires. Si vous avez besoin de savoir à partir de quelle table les informations sont prises, utilisez la réponse Sam's. J'ai inséré la conversion pour m'assurer que toutes les entrées ont le même type et la même longueur de données, si elles sont dans votre DB, vous pouvez laisser cette partie et utiliser simplement les noms. Si nécessaire, la longueur doit être ajustée.

Pour être clair, il n'y a qu'une colonne avec le nom "comment" maintenant.

+0

Je pense que vous m'avez mal compris .. Je veux montrer ce que l'utilisateur ($ pusername) a été posté, dans member_film, member_meetups, member_tutorials .. Et puis si par exemple l'utilisateur a 2 colonnes avec son nom d'utilisateur, Je veux afficher le "navn" de la même colonne. Idem avec le titre sur member_tutorials, et meetup sur member_meetups. J'espère que vous me comprenez mieux maintenant s'il vous plaît commenter si vous avez des questions – Karem

+0

Ok s'il vous plaît vérifier ma mis à jour answwr – Karem