Joomla - 从列合并数据库结果

时间:2014-04-25 14:30:17

标签: php mysql database joomla

这是我第一次使用StackOverflow,我想知道是否有人可以帮我解决以下问题。

我有一个运行RS Events Pro组件的joomla网站。它的工作方式是我发布一个事件列表,人们可以搜索一个事件,像谷歌一样显示一个结果列表。从结果中,您可以单击它以购买门票并查看更多详细信息。

现在在结果页面上,我想添加一个小功能,可以提供门票状态或者活动已售罄。

我创建了以下代码,但我想合并结果,例如: 事件一可能有3种不同类型的票证。第一种类型可能已售罄,因此我的查询返回以下内容:'售罄。可用。 。可用'

我想要它所以它只显示'售罄'如果所有门票都已售罄。

无论如何你可以合并数据库列中的结果,因为如果可以的话,也许我可以合并给定事件的所有可用票证,如果它的> = 1那么我可以显示'可用票证&#39 ;

<?php
            $db = &JFactory::getDBO();
            $db->setQuery("SELECT * FROM #__rseventspro_tickets WHERE ide = '".$event->id."'");
            $tickets = $db->loadObjectList();

              foreach($tickets as $ticket)
              {
                if($ticket->seats >= '1'){
                    echo('Tickets available. ');

                }
                else{
                    echo('Sold out. ');
                }

              } 
              ?>

这是我的数据库表转储 - 我希望这会有所帮助:

--
-- Table structure for table `tkmrf_rseventspro_tickets`
--

CREATE TABLE IF NOT EXISTS `tkmrf_rseventspro_tickets` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ide` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `price` float NOT NULL,
  `seats` int(10) NOT NULL,
  `user_seats` int(10) NOT NULL,
  `description` text NOT NULL,
  `position` text NOT NULL,
  `groups` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=27 ;

--
-- Dumping data for table `tkmrf_rseventspro_tickets`
--

INSERT INTO `tkmrf_rseventspro_tickets` (`id`, `ide`, `name`, `price`, `seats`, `user_seats`, `description`, `position`, `groups`) VALUES
(19, 65, 'Standard', 5, 190, 0, 'Standard ticket for entry to the club.', '', ''),
(20, 65, 'VIP Tables', 50, 10, 0, 'Get the VIP treatment! \r\nYour very own table and a bottle of Champagne to get you started.', '', ''),
(23, 68, 'Standard', 5, 0, 0, 'standard entry. prices are higher on the door.', '', ''),
(22, 67, 'Fast-Track', 5, 0, 0, 'Queue jump with the fast track tickets!', '', ''),
(24, 68, 'Queue Jump', 8, 0, 0, 'don''t wait around in the cold, pay a few quid more and jump the queue!', '', ''),
(25, 77, 'vip', 60, 500, 10, 'ticket description', '', '{"0":"1"}'),
(26, 77, 'cheap tickets', 5, 0, 0, 'ticket description', '', '{"0":"1"}');
    enter code here

1 个答案:

答案 0 :(得分:1)

你可以在sql-query中进行一个group-call,但是处理它会很麻烦。在这种情况下,只需在额外的时间内完成结果就可以了,例如:

$available=array(); 
foreach($tickets as $ticket)
{ 
    if( !isset($available[$ticket->ide])) { $available[$ticket->ide]=true; }
    $available[$ticket->ide]=$available[$ticket->ide]?
    $ticket->seats > 0:$available[$ticket->ide]; 
}
// now like you said, only
foreach($tickets as $ticket)
{   
    if($available[$ticket->ide]){
        echo('Tickets available. ');
    }
    else{
        echo('Sold out. ');
    }
} 

除非你有大量的事件,否则它会在性能方面产生很大的不同,像这样的循环数组很快。