Можно ли выводить данные из двух разных таблиц?

#1 8 июля 2012 в 21:51
Собственно скр5естили КАЛЕНДАРЬ от утконоса и инстант мапы. Т.е теперь в календаре выводятся события инстантмапы. Но теперь не знаю как вывести родные события календаря.

как делать запрос сразу в две таблицы?
#2 8 июля 2012 в 22:15
LEFT JOIN, RIGHT JOIN, в нете полно подробных обьяснений и примеров
#3 9 июля 2012 в 06:34

LEFT JOIN, RIGHT JOIN, в нете полно подробных обьяснений и примеров

Максим Шорин

ну это смотря что им надо из таблиц выдернуть!
Но даже если в них (в таблицах) какая-то совсем не связанная информация,
то, честное слово, никто не запрещает сделать два запроса подряд
))
#4 9 июля 2012 в 07:03
я ни чего не говорю против нескольких запросов, я даже сам когда времени нет, делаю так, но правильней, делать не так… один хрен одним запросом вынимать только одно не кашерно если таблиц 2, сам понимаешь…
#5 9 июля 2012 в 08:11
я тоже за красоту, поэтому

LEFT JOIN, RIGHT JOIN, в нете полно подробных обьяснений и примеров

Максим Шорин
)))
#6 9 июля 2012 в 15:23
если подойдет
вот есть решение .
кстати тоже для Мапса делал )

но скорее всего у вас другое…
#7 9 июля 2012 в 21:45
запрос формируется в model.php?)

тогда у меня такой сейчас, выводит в афише события из мапсы. вот хотелось бы теперь еще вывести события из самой афиши, которые могут добавлять пользователи.
  1.  
  2. function getCalendar()
  3. {
  4. $sql = $this->inDB->query("SELECT id,user_id as author_id, date_start as start_time,date_end as end_time,title FROM cms_map_events");
  5.  
  6.  
  7. if(!$sql)
  8. {
  9. return false;
  10. }
  11. else
  12. {
  13. return $sql;
  14. }
  15. }
  16.  
а в оригинале выборка идет из
  1. $sql = $this->inDB->query("SELECT * FROM cms_events");
вот хочется вывести из обеих таблиц
#8 9 июля 2012 в 22:03
Надо данные из этих двух запросов сложить одну кучу? У них структура одинаковая?
#9 9 июля 2012 в 22:16
структура второй

  1. CREATE TABLE IF NOT EXISTS `cms_events` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `author_id` int(11) NOT NULL,
  4. `type` varchar(128) NOT NULL,
  5. `apx` varchar(128) NOT NULL,
  6. `start_time` int(11) NOT NULL,
  7. `end_time` int(11) NOT NULL,
  8. `title` varchar(128) NOT NULL,
  9. `content` longtext NOT NULL,
  10. PRIMARY KEY (`id`)
  11. ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=5 ;
  12. -- v 0.1.0
  13. INSERT INTO cms_comment_targets (target, component, title)
  14. VALUES ('calendar', 'calendar', 'Календарь');
  15. -- v 0.2.0
  16. CREATE TABLE IF NOT EXISTS `cms_events_signup` (
  17. `event_id` int(11) NOT NULL,
  18. `user_id` int(11) NOT NULL,
  19. `time` int(11) NOT NULL
  20. ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COLLATE=cp1251_bin;
#10 10 июля 2012 в 08:04
Давайте файл, в котором вызываются эти функции, я сведу результат в один массив
#11 10 июля 2012 в 09:38
а какой файл за это отвечает в движке?)
#13 10 июля 2012 в 10:39
model.php это файл. в котором функции прописаны (что мы и видим)
а нужен файл, из которого к этим функциям идёт обращение. Ну frontend.php как правило :)

ЛИРИЧЕСКОЕ ОТСТУПЛЕНИЕ:
Логика такая: frontend.php обращается в model.php к функциям, чтобы (в нашем случае) получить данные из БД
Получив их, он может произвести с ними любые действия а потом отправить в ???????.tpl чтобы показать результат пользователю.
Сейчас задача — получить из model.php два пакета данных, объединить их в один.
Поэтому мне и нужно "видеть" где эти данные получаются
#15 10 июля 2012 в 12:03
в model.php добавляем:

function getEvents(){
$sql = $this->inDB->query("SELECT id, author_id, start_time, end_time, title FROM cms_events");
if(!$sql){return false;}else{return $sql;}
}
воткнуть можно хоть куда, я поставил со стр 95 — для красоты

во фронтенд, со стр 108 ( то есть ПЕРЕД if($inUser->id == 0) )
ДОБАВЛЯЕМ:
//------прицепляем вторую таблицу---------
$events = $model->getEvents($inUser->id);
while ($data = mysql_fetch_assoc($events))
{
$id = $data["id"];
$author_id = $data["author_id"];
$title = $data["title"];

$starttime = $data["start_time"];
$endtime = $data["end_time"];
$type = $data["type"];

$start_time = strtotime($starttime);
$end_time = strtotime($endtime);

$starttime = $start_time;
$endtime = $end_time;

$events_string .= "{
title: '".str_replace("'",'"',$title)."',
start: '".date("Y-m-d H:i:s", $starttime)."',
end: '".date("Y-m-d H:i:s", $endtime)."',
url: '/maps/events/".$id.".html',";
if($endtime-$starttime > 60*60*8)
{
$events_string .= "allDay: true,";
}
else
{
$events_string .= "allDay: false,";
}
$events_string .= "color: '#ffc571',\n";
$events_string .= "textColor: '#000000',\n";
$events_string .= "},
";
}
//----------------------------------------
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.