2013-04-21 4 views
0

любой может помочь мне выбрать из нескольких таблиц MySQL и отсортировать по игровому лимиту 15 с помощью php?выберите данные из нескольких таблиц, используя php union

<?php 
    //$query = "SELECT id, gamename, gameplayed FROM action, adventure, augur, beauty, chess, joke, mmorpg, multiplayer, platform, puzzle, racing, shooting, sport, stratergy WHERE id = :id"; 
    $query = ' 
    SELECT id, gamename, gameplayed FROM((
    SELECT id, gamename, gameplayed 
    FROM action 
ORDER BY gameplayed 
DESC LIMIT 15 
) UNION (
    SELECT id, gamename, gameplayed 
    FROM adventure 
    ORDER BY gameplayed 
    DESC LIMIT 15 
    ))as t ORDER BY gameplayed'; 

    $query_params = array(':id' => '1'); 
    //$query = "SELECT id, gamename FROM action, adventure, augur, beauty, chess, joke, mmorpg, multiplayer, platform, puzzle, racing, shooting, sport, stratergy ORDER BY gameplayed DESC LIMIT 15"; 
    try 
     { 
     // These two statements run the query against your database table. 
     $stmt = $db->prepare($query); 
     $stmt->execute($query_params); 
     } 
    catch(PDOException $ex) 
     { 
     // Note: On a production website, you should not output $ex->getMessage(). 
     // It may provide an attacker with helpful information about your code. 
     die("Failed to run query: " . $ex->getMessage()); 
     } 

     $rows = $stmt->fetchAll(); 
     foreach($rows as $row): 
     echo $rows['t']; 
     endforeach; 
     unset($row); 
     ?> 

я поиск Google нашел решение, используя соединение, но я постоянно получаю ошибку «Undefine индекс т»

+0

Что должно быть? Echo $ rows ['t']; 'должен делать? – Melki

+1

't' - ваш псевдоним таблицы, поэтому его нельзя использовать в' $ rows [] '. Попробуйте использовать '$ rows ['id']', '$ rows ['gamename']' или '$ rows ['gameplayed']' в вашем 'foreach ($ rows as $ row):'. – Sean

ответ

0

Попробуйте изменить SQL запрос к этому

SELECT id, gamename, gameplayed 
FROM action 
LIMIT 15 
UNION 
SELECT id, gamename, gameplayed 
FROM adventure 
ORDER BY gameplayed DESC 
LIMIT 15 
ORDER BY gameplayed 
+0

, если вся таблица содержит около 30 тысяч строк, потребуется ли долгое время на выполнение запроса? –

+0

Нет, поскольку у вас есть установленные пределы. Он должен работать быстро. – Manu

0

Это Дон» t вы видите поле с именем «t» в выбранном запросе? Попробуйте var_dump()$rows, тогда вы можете увидеть, что происходит не так.

Что вы делаете, это попытка выбрать псевдоним таблицы. Вы не можете их выбирать, только выберите поля.

Ваш результат должен теперь посмотреть на начало подмассивов вашего массива $rows, как и элементы первой таблицы, а второй, смешанный, следуя порядку в столбце gameplayed.

0

Вы пытались отбирать все результаты от UNION в качестве псевдонима 't'? Это не сработает, вы должны использовать их один за другим, а именно:

...UNION (
SELECT t.id as 'tid', t.gamename as 'tgamename', t.gameplayed as 'tgameplayed' 
FROM adventure AS t 
... 


$row['tid']; $row['tgamename']; $row['tgameplayed'] 
+0

Err .. что? Затем вы можете делать два разных запроса ... – bwoebi

+0

Никогда не тестировался, но если он объединяет результаты с именами первых названий столбцов, не сможете ли вы вернуть данные только из объединенного select, если его собственные столбцы имеют псевдонимы? И общий результат без аллиазий? –

+0

У вас будет много пустых строк с этим запросом. – bwoebi

Смежные вопросы