Как я могу сделать UNION ALL, запрос, в Kohana Framework - PullRequest
0 голосов
/ 16 октября 2011

Как я могу написать это:

SELECT
'Name' AS Type,
id AS Restaurant_ID,
NULL AS Item_ID,
Name,
Address,
NULL AS M_Id
FROM restaurants
WHERE Name LIKE '%forår%'
UNION ALL
SELECT
'Address' AS Type,
id AS Restaurant_ID,
NULL AS Item_ID,
Name,
Address,
NULL AS M_Id
FROM restaurants
WHERE Address LIKE '%forår%'
UNION ALL
SELECT
'Item' AS Type,
NULL AS Restaurant_ID,
id AS Item_ID,
Name,
NULL AS Address,
M_Id
FROM menu_items
WHERE name LIKE '%forår%'

в Kohana Query builder?

Я нашел это:

Как построить запрос UNION с ORDER BY и GROUP BY в конструкторе запросов Kohana?

А также сделал 3 запроса:

        $query1 = 
        DB::select(
        array('name', 'Type'), 
        array('id', 'Restaurant_ID'), 
        array('NULL', 'Item_ID'), 'Name', 'Address', array('NULL', 'M_Id'))
        ->from('restaurants')
        ->where('Name', 'LIKE', '%forår%');

        $query2 =
        DB::select(
        array('Address', 'Type'),
        array('NULL', 'Item_ID'),
        Name,
        Address,
        array('NULL', 'M_Id'))
        ->from('restaurants')
        ->where('Address', 'LIKE', '%forår%');

        $query3 = 
        DB::select(
        array('Item', 'Type'),
        array('NULL', 'Restaurant_ID'),
        array('id', 'Item_ID'),
        Name,
        array('NULL', 'Address'),
        M_Id)
        ->from('menu_items')
        ->where('name', 'LIKE', '%forår%');

Но теперь я не знаю, как и где я должен применить союз ()

Ответы [ 2 ]

4 голосов
/ 17 октября 2011

Я не проверял ваш код, но попробуйте это:

$query1 = 
        DB::select(
            array('name', 'Type'), 
            array('id', 'Restaurant_ID'), 
            array('NULL', 'Item_ID'), 
            'Name', 
            'Address', 
            array('NULL', 'M_Id')
        )
        ->from('restaurants')
        ->where('Name', 'LIKE', '%forår%');

$query2 =
        DB::select(
            array('Address', 'Type'),
            array('NULL', 'Item_ID'),
            Name,
            Address,
            array('NULL', 'M_Id')
        )
        ->union($query1)
        ->from('restaurants')
        ->where('Address', 'LIKE', '%forår%');

$query3 = 
        DB::select(
            array('Item', 'Type'),
            array('NULL', 'Restaurant_ID'),
            array('id', 'Item_ID'),
            Name,
            array('NULL', 'Address'),
            M_Id
        )
        ->union($query2)
        ->from('menu_items')
        ->where('name', 'LIKE', '%forår%')
        ->execute();
1 голос
/ 17 октября 2011
<?php

$query = DB::query(Database::SELECT, "SELECT
'Name' AS Type,
id AS Restaurant_ID,
NULL AS Item_ID,
Name,
Address,
NULL AS M_Id
FROM restaurants
WHERE Name LIKE '%:search%'
UNION ALL
SELECT
'Address' AS Type,
id AS Restaurant_ID,
NULL AS Item_ID,
Name,
Address,
NULL AS M_Id
FROM restaurants
WHERE Address LIKE '%:search%'
UNION ALL
SELECT
'Item' AS Type,
NULL AS Restaurant_ID,
id AS Item_ID,
Name,
NULL AS Address,
M_Id
FROM menu_items
WHERE name LIKE '%:search%'");

$query->param(':search', $_GET['search']);

$query->execute();
...