2010-02-28 3 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> 

У меня это есть. Теперь у меня есть 3 столбца, где username - имя пользователя в базе данных. 2 в member_film, 1 в member_meetupsэхо из UNION sql?

Эхо $ число, показывает, что это правильно, что у меня есть 3.

Теперь, когда я пытаюсь вторить «NAVn», это эхо только 1, когда есть 2 столбцы? И когда я пытаюсь эхо «meetup», это говорит неопределенный индекс: meetup, вроде бы нечего показывать .. но есть, mysql_num_rows основал его, иначе это было бы 2?

Я думаю, что большинство из вас поняли меня .. Я хочу, чтобы показать, что пользователь ($ pusername) были размещены в member_film, member_meetups, member_tutorials .. И потом, если, например, пользователь имеет 2 колонки с его именем, Я хочу отобразить «navn» из той же колонки. То же самое с заголовком в статьях member_tutorials и meetup на member_meetups.

Пример того, как я хочу, чтобы это выглядело как:

ваших сообщений: (., Которые, как я хочу, проверяет три таблицы, если есть какие-либо столбцы с именем пользователя в колонке «Имя пользователя»)

моего новое видео, его так хорошо (NAVn, что из member_film)

Мой скучный Meetup с родителями (название, которое из member_meetup)

Отличное видео! (navn, который от member_film)

+0

Вы хотите объединение, то есть одно поле, или вы хотите присоединиться, т. Е. 3 поля? – AxelEckenberger

+0

Можете ли вы разместить образец вывода (то есть, как должен выглядеть результат), чтобы мы могли лучше понять вашу проблему. – AxelEckenberger

+0

хорошо, пожалуйста, см. Мой обновленный вопрос – Karem

ответ

2

UNION выбирает, соединяет операторы выбора в 1 набор результатов, поэтому имеют одинаковые имена столбцов.

Правильный 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'"); 

и в PHP:

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

и выяснить, что таблица:

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

Не уверен, что это то, что предназначалось для OP ... поэтому я уточнил, см. Ниже. – AxelEckenberger

+0

Но когда я использую $ rowit ["colName"], он все еще отображает только 1 из 2-х столбцов из member_film и не показывает 1 столбец из member_meetup тоже? это не решение – Karem

1

Объединение запросов объединяет результаты нескольких запросов в один результат. Чтобы профсоюз работал, все подзапросы должны возвращать поля с одинаковыми типами данных для каждой позиции запроса или каждого именованного поля.

Таким образом, ваш исходный запрос приведет к набору результатов с одним полем, называемым «navn» (взятым из первого запроса запроса объединения). Чтобы сделать его более читаемым, вы можете либо переименовать поле, используя As myName на каждом из подзапросов (решение sam munkes).

Однако, от того, как вы обращаетесь запрос я считаю, вы хотите иметь одну строку со всеми 3 значения на него, то вы должны попробовать использовать вместо этого:

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 

Edit после комментариев:

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' 

Теперь это должно дать таблицу, имеющую один столбец с именем «комментарий» и имеющий varchar (100). Теперь вы можете получить доступ ко всем значениям через столбец комментариев. Если вам нужно знать, из какой таблицы взята информация, используйте ответ Sam's. Я вставил конвертер, чтобы убедиться, что все записи имеют одинаковый тип и длину данных, если они находятся в вашем БД, вы можете оставить эту часть и просто использовать имена. При необходимости необходимо отрегулировать длину.

Чтобы было ясно, есть только одна колонка с названием «комментарий».

+0

Я думаю, что вы меня неправильно поняли .. Я хочу показать, что было опубликовано пользователем ($ pusername), в member_film, member_meetups, member_tutorials .. И если, например, у пользователя есть 2 столбца с его именем пользователя, Я хочу отобразить «navn» из той же колонки. То же самое с заголовком в статьях member_tutorials и meetup на member_meetups. Надеюсь, вы поймете меня лучше, теперь, пожалуйста, прокомментируйте ответ, если у вас есть вопросы. – Karem

+0

Хорошо, пожалуйста, уточните мой обновленный answwr – Karem