Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как обяединить 2 таблицы и вывести даные?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
pasha52
Отправлено: 15 Июня, 2013 - 16:07:39
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Июнь 2013  


Помог: 0 раз(а)




подскажите MySQL запрос чтобы обьединить две таблицы и вывести значения
Пробовал
PHP:
скопировать код в буфер обмена
  1.  
  2. $result = mysql_query("SELECT * FROM knigi , gurnal WHERE author ='$author'",$db);
  3. и так
  4. $result = mysql_query("SELECT * FROM knigi JOIN gurnal WHERE author ='$author'",$db);
  5.  
  6.  

ничего не выходит(((
Прикреплено изображение (Нажмите для увеличения)
site.jpg
 
 Top
LIME
Отправлено: 15 Июня, 2013 - 16:11:51
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




PHP:
скопировать код в буфер обмена
  1. $result = mysql_query("SELECT * FROM knigi JOIN gurnal ON knigi.author =gurnal.author  WHERE  knigi.author ='$author'",$db) or die(mysql_error());
 
 Top
Мелкий Супермодератор
Отправлено: 15 Июня, 2013 - 16:15:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Таблица гурнал же с книгами не связана, вам не джойн нужен, а union.
CODE (SQL):
скопировать код в буфер обмена
  1. (SELECT title, name, year FROM knigi WHERE author ='$author')
  2. UNION ALL
  3. (SELECT title, name, year FROM gurnal WHERE author ='$author')
  4. ORDER BY year


-----
PostgreSQL DBA
 
 Top
DelphinPRO
Отправлено: 15 Июня, 2013 - 16:35:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)





Мелкий пишет:
Таблица гурнал

тут кто-то спорил недавно о том что инглиш не хочет использовать в проектах. Вот такая херня и выходит. нет бы назвать таблицу "journal"...


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Мелкий Супермодератор
Отправлено: 15 Июня, 2013 - 17:29:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)





DelphinPRO, это я специально как раз так её и обозвал Подмигивание


-----
PostgreSQL DBA
 
 Top
pasha52
Отправлено: 15 Июня, 2013 - 17:32:32
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Июнь 2013  


Помог: 0 раз(а)




Мелкий пишет:
Таблица гурнал же с книгами не связана, вам не джойн нужен, а union.
CODE (SQL):
скопировать код в буфер обмена
  1. (SELECT title, name, year FROM knigi WHERE author ='$author')
  2. UNION ALL
  3. (SELECT title, name, year FROM gurnal WHERE author ='$author')
  4. ORDER BY year


Спасибо за подсказку подобное уже пытался реализовать только SELECT * ставил поэтому и ошибки выскакивали ( , как я понял то поля title, name, year должны в обеих таблицах совпадать и если я захочу вывести в title, name, year, и добавлю новую ячейку firma в таблице knigi то будет выдавать ошибку, вопрос как и эту ячейку вывести на экран если она находится только в табл. firma knigi?

CODE (SQL):
скопировать код в буфер обмена
  1. (SELECT title, name, year, [b]firma [/b]FROM knigi WHERE author ='$author')
  2. UNION ALL
  3. (SELECT title, name, year FROM gurnal WHERE author ='$author')
  4. ORDER BY year

(Отредактировано автором: 15 Июня, 2013 - 18:10:22)

 
 Top
muravey
Отправлено: 15 Июня, 2013 - 17:52:30
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Май 2013  


Помог: 0 раз(а)




Попробуйте такую реализацию

CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. (SELECT author.name, knigi.title, knigi.name, DATE_FORMAT(knigi.`year`, '%Y') AS `year`
  3. FROM author
  4. JOIN knigi ON knigi.author_id = author.author_id
  5. WHERE author.author_id = 1)
  6. UNION
  7. (SELECT author.name, gurnal.title, gurnal.name, DATE_FORMAT(gurnal.`year`, '%Y') AS `year`
  8. FROM author
  9. JOIN gurnal ON gurnal.author_id = author.author_id
  10. WHERE author.author_id = 1)
  11. ORDER BY `year`;
  12.  


На выходе получите
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2.  name   title   name    year По возрастанию
  3. Автор 2         Заголовок книги 1       Название книги 1        2012
  4. Автор 2         Заголовок книги 1       Название книги 1        2013
  5. Автор 2         Заголовок журнала 4     Название журнала 4      2013
  6.  

(Добавление)
для автора 1
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2.  name   title   name    year По возрастанию
  3. Автор 1         Заголовок журнала 1     Название журнала 1      2013
  4. Автор 1         Заголовок журнала 2     Название журнала 2      2013
  5. Автор 1         Заголовок журнала 3     Название журнала 3      2013
  6. Автор 1         Зголовок книги 1        Название книги 1        2013
  7. Автор 1         Зголовок книги 2        Название книги 2        2013
  8.  


для автора 2
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. Автор 2         Заголовок книги 4       Название книги 4        2012
  3. Автор 2         Заголовок журнала 4     Название журнала 4      2013
  4. Автор 2         Заголовок книги 3       Название книги 3        2013
  5.  
 
 Top
Мелкий Супермодератор
Отправлено: 15 Июня, 2013 - 18:21:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




pasha52 пишет:
как я понял то поля title, name, year должны в обеих таблицах совпадать

Количество и порядок полей всех запросов, объединяемых union, должно совпадать.

Классический обходной манёвр, если поле есть только в одной из таблиц - указать в других таблицах вместо поля любую удобную для последующей обработки константу:
CODE (SQL):
скопировать код в буфер обмена
  1. (SELECT title, name, year, firma FROM knigi WHERE author ='$author')
  2. UNION ALL
  3. (SELECT title, name, year, NULL AS firma FROM gurnal WHERE author ='$author')
  4. ORDER BY year

Тот же фокус используется, чтобы разбирать из какого запроса какой результат пришёл:
CODE (SQL):
скопировать код в буфер обмена
  1. (SELECT title, name, year, firma, 'this row from table knigi' AS src FROM knigi WHERE author ='$author')
  2. UNION ALL
  3. (SELECT title, name, year, NULL AS firma, 'this row from table gurnal' AS src FROM gurnal WHERE author ='$author')
  4. ORDER BY year


-----
PostgreSQL DBA
 
 Top
pasha52
Отправлено: 15 Июня, 2013 - 20:04:08
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Июнь 2013  


Помог: 0 раз(а)




Мелкий пишет:
Классический обходной манёвр, если поле есть только в одной из таблиц - указать в других таблицах вместо поля любую удобную для последующей обработки константу:


ага теперь понял БОЛЬШОЕ СПАСИБО за разъяснение, так как сегодня только столкнулся с UNION и JOIN на многих форумах когда искал решения встречал приставки
подскажите что они означают или где это нормально описано чтобы почитать и понять?
 
 Top
LIME
Отправлено: 15 Июня, 2013 - 20:14:18
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




pasha52 пишет:
или где это нормально описано чтобы почитать и понять?

http://www[dot]sql-tutorial[dot]ru/ru/bo[dot][dot][dot]_result_set[dot]html
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB