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
Форумы портала PHP.SU :: Версия для печати :: Как обяединить 2 таблицы и вывести даные?
Форумы портала PHP.SU » » Работа с СУБД » Как обяединить 2 таблицы и вывести даные?

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

1. pasha52 - 15 Июня, 2013 - 16:07:39 - перейти к сообщению
подскажите 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.  

ничего не выходит(((
2. LIME - 15 Июня, 2013 - 16:11:51 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $result = mysql_query("SELECT * FROM knigi JOIN gurnal ON knigi.author =gurnal.author  WHERE  knigi.author ='$author'",$db) or die(mysql_error());
3. Мелкий - 15 Июня, 2013 - 16:15:40 - перейти к сообщению
Таблица гурнал же с книгами не связана, вам не джойн нужен, а 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
4. DelphinPRO - 15 Июня, 2013 - 16:35:30 - перейти к сообщению

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

тут кто-то спорил недавно о том что инглиш не хочет использовать в проектах. Вот такая херня и выходит. нет бы назвать таблицу "journal"...
5. Мелкий - 15 Июня, 2013 - 17:29:49 - перейти к сообщению

DelphinPRO, это я специально как раз так её и обозвал Подмигивание
6. pasha52 - 15 Июня, 2013 - 17:32:32 - перейти к сообщению
Мелкий пишет:
Таблица гурнал же с книгами не связана, вам не джойн нужен, а 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
7. muravey - 15 Июня, 2013 - 17:52:30 - перейти к сообщению
Попробуйте такую реализацию

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.  
8. Мелкий - 15 Июня, 2013 - 18:21:08 - перейти к сообщению
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
9. pasha52 - 15 Июня, 2013 - 20:04:08 - перейти к сообщению
Мелкий пишет:
Классический обходной манёвр, если поле есть только в одной из таблиц - указать в других таблицах вместо поля любую удобную для последующей обработки константу:


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

http://www[dot]sql-tutorial[dot]ru/ru/bo[dot][dot][dot]_result_set[dot]html

 

Powered by ExBB FM 1.0 RC1