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 :: Помогите склеить таблицы

 PHP.SU

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


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

> Без описания
adrea_007
Отправлено: 15 Августа, 2012 - 11:55:51
Post Id


Новичок


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


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




Нужно из двух таблиц сделать одну большую, но увеличить не горизонтально, а вертикально

CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE table_1
  2.  
  3. id name     date
  4. 1  name_1   12345678
  5. 2  name_2   12345679
  6. 3  name_3   12345680

CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE table_2
  2.  
  3. id name     date
  4. 1  name_6   12345678
  5. 2  name_7   12345679
  6. 3  name_8   12345680



нужен вывод SELECT, чтобы получилось:
CODE (SQL):
скопировать код в буфер обмена
  1. id name     date
  2. 1  name_1   12345678
  3. 2  name_2   12345679
  4. 3  name_3   12345680
  5. 1  name_6   12345678
  6. 2  name_7   12345679
  7. 3  name_8   12345680

(Отредактировано автором: 15 Августа, 2012 - 11:57:00)

 
 Top
Мелкий Супермодератор
Отправлено: 15 Августа, 2012 - 12:47:58
Post Id



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


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


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




union?


-----
PostgreSQL DBA
 
 Top
Viper
Отправлено: 15 Августа, 2012 - 12:52:27
Post Id



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


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM `table_1`, `table_2` ORDER BY `name` ASC
можно и через UNION

(Отредактировано автором: 15 Августа, 2012 - 12:53:48)



-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
adrea_007
Отправлено: 15 Августа, 2012 - 15:44:12
Post Id


Новичок


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


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




Viper пишет:
UNION

подходит, только теперь идут записи одной таблицы, а затем второй. как сделать чтобы они сортировались по date?
(Добавление)
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM photoalbum_event UNION SELECT * FROM photoalbum_news ORDER BY album_datefirstphoto


вот так, оказывается можно только в конце ORDER BY писать Хм
(Добавление)
помогите разобраться еще в одном моменте.

таблица photoalbum_event имеет столбец eventID
а таблица photoalbum_news столбец newsID

но в результате теперь все значения newsID доступны как eventID

PHP:
скопировать код в буфер обмена
  1. while($row = $res->fetch_assoc())
  2. {
  3.   echo $row['newsID']; ## недоступно, все идентификаторы теперь:
  4.   echo $row['eventID'];
  5. }


а мне нужно в блоке while как-то идентифицировать что результат с определенной таблицы, потому что фотографии берутся из таблиц photos_event и photos_news

следующий код никогда не найдет переменную $row['newsID'];

PHP:
скопировать код в буфер обмена
  1. if($album['newsID'])       {$type = 'news';  $varID = $album['newsID'];  }
  2. elseif($album['eventID'])  {$type = 'event'; $varID = $album['eventID']; }
 
 Top
Viper
Отправлено: 15 Августа, 2012 - 16:33:16
Post Id



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


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT *
  2. FROM (
  3.         SELECT * FROM `photoalbum_event`
  4.         UNION
  5.         SELECT * FROM `photoalbum_news`
  6. ) AS a
  7. ORDER BY `album_datefirstphoto` ASC


как-то так.
(Добавление)
adrea_007 перечисляйте нужные поля и назначайте им алиас.

пример
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `a`.`id` AS `id_first`, `b`.`id` AS `id_second`...


В результате у вас будет $row['id_first'] и $row['id_second']

(Отредактировано автором: 15 Августа, 2012 - 16:33:30)



-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
adrea_007
Отправлено: 15 Августа, 2012 - 17:04:51
Post Id


Новичок


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


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




у вас же обеим таблицам присвоен общий алиас AS a, откуда же тогда `b`.`id` AS `id_second` возьмется?
(Добавление)
можно конечно в каждую таблицу добавить по столбцу `type' и хранить в них event и news, но это не рационально
 
 Top
Viper
Отправлено: 15 Августа, 2012 - 17:30:43
Post Id



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


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




adrea_007 пишет:
у вас же обеим таблицам присвоен общий алиас AS a, откуда же тогда `b`.`id` AS `id_second` возьмется?
я вам привел пример как поля с одинаковыми именами в разных таблицах использовать. Иначе вы получите в лучшем случае кашу, в худшем ошибку Ambiguous columns. Ничто вам не мешает 2 раза выбрать одно поле из одной и той же таблицы но с разным алиасом(к примеру для использования в вложенных запросах)


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
adrea_007
Отправлено: 15 Августа, 2012 - 17:31:30
Post Id


Новичок


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


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




CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE photoalbum_event
  2. (
  3.   albumID
  4.   eventID
  5.   album_name
  6.   album_datefirstphoto
  7. )
  8.  
  9.  
  10. CREATE TABLE photoalbum_news
  11. (
  12.   albumID
  13.   newsID
  14.   album_name
  15.   album_datefirstphoto
  16. )



Таблицы отличаются лишь одним столбцом, а в итоге со второй таблицы newsID вообще никак не доступно

CODE (SQL):
скопировать код в буфер обмена
  1. (SELECT * FROM photoalbum_event WHERE album_datefirstphoto > 1) UNION
  2. (SELECT * FROM photoalbum_news  WHERE album_datefirstphoto > 1) ORDER BY album_datefirstphoto DESC

(Отредактировано автором: 15 Августа, 2012 - 17:34:13)

 
 Top
Мелкий Супермодератор
Отправлено: 15 Августа, 2012 - 17:57:31
Post Id



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


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


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




CODE (SQL):
скопировать код в буфер обмена
  1. (SELECT нужные поля, 'thisIsEvent' AS type FROM photoalbum_event WHERE album_datefirstphoto > 1) UNION
  2. (SELECT нужные поля в том же порядке, 'thisIsNews' AS type FROM photoalbum_news  WHERE album_datefirstphoto > 1) ORDER BY album_datefirstphoto DESC


-----
PostgreSQL DBA
 
 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