2013-09-26 5 views
-2

У меня есть две таблицыPHP MySQL запросов для выборки из 2 ДАННЫЕ таблиц

пользователи

enter image description here

игры

enter image description here

Мое требование

[ 
{ 
    users:{ 
    id: "1", 
    user: "user1", 
    games:[ 
     { 
     id : "1", 
     game_names : "football" 
     } 
     { 
     id : "2", 
     game_names : "cricket" 
     } 
     { 
     id : "3", 
     game_names : "athletics" 
     } 
     { 
     id : "4", 
     game_names : "badminton" 
     } 
    ] 
    } 
    users: { 
    id : "2", 
    user : "user2", 
    games :[ 
     { 
     id : "3", 
     game_names : "athletics" 
     } 
     { 
     id : "4", 
     game_names : "badminton" 
     } 
     { 
     id: "5", 
     game_names : "basketball" 
     } 
    ] 
    } 
} 
] 

Что я использую сейчас

<?php 
$result = mysql_query("SELECT *,games.game_names as games 
FROM users 
LEFT JOIN games ON users.games=games.id 
GROUP BY users.id") or die(mysql_error()); 

while($user = mysql_fetch_array($result, MYSQL_ASSOC)) {   
    $users[] = array(
       'user'=>array(
        'id' => $user['id'], 
        'user' => $user['user'],       
        'games' => $user['games']   
       ) 
    ); 
} 
$output = json_encode(array('statics' => $users)); 
echo $output; 
    ?> 

Но я получаю

{ 
statics: [ 
    { 
    users: { 
     id: "1", 
     user: "user1", 
     games: "1,2,3,4" 
    } 
    }, 
    { 
    users: { 
    id: "2", 
    user: "user2", 
    games: "3,4,5" 
    } 
    } 
] 
} 

Но я не могу получить второй массив игры

Как мне изменить код кода PHP.

+1

Пожалуйста, пожалуйста, пожалуйста _stop используя устаревший 'mysql_ *' extension_. Прочтите [поле для чтения] (http://www.php.net/mysql_connect). Научитесь использовать либо «PDO», либо «mysqli_ *» (или оба) –

+0

@EliasVanOotegem ok bro. Сначала я должен изучить основы.Затем я перейду к продвинутому PDO – PonrajPaul

+0

Нормализовать эту первую таблицу и не нужно изучать устаревшие основы, изучить основы mysqli, если вы хотите что-то похожее на mysql –

ответ

1

использовал этот запрос работает отлично

SELECT users.*,games.game_names,games.id as games_id 
FROM users 
LEFT JOIN games ON FIND_IN_SET(games.id,users.games) 

enter image description here

Теперь набор кода PHP в соответствии ваше требование

+0

я попытался это ... но оно приходит как { статики: [ { пользователей: { ID:«1», пользователя: "user1", игры: "1,2,3,4" } }, { пользователей: { ID: "2", пользователь: "пользователь2", игры: «3, 4,5 " } } ] } – PonrajPaul

+0

Мне нужен формат массива внутри игр. А также нужно получить значение вместо id – PonrajPaul

+0

Я не знаю о find_in_set, спасибо @ShaktiPatel – Sal00m

0

Вы должны использовать внутреннее соединение вместо левого присоединиться

$result = mysql_query("SELECT * 
FROM users 
INNER JOIN games ON users.games=games.id 
GROUP BY users.id") or die(mysql_error()); 
+0

Неправильно, посмотрите на значения 'users.games' –

+0

внутреннее соединение также дает тот же результат – PonrajPaul

1

Ну , вы не можете сделать это непосредственно в запросе, я думаю. Вместо этого вы должны нормализовать модель:

users 
user_id 
user_name 

users_games 
user_id 
game_id 

games 
game_id 
game_name 

Для примера данные будут:

users: 
1,user1 
2,user2 

users_games: 
1,1 
1,2 
1,3 
1,4 
2,3 
2,4 
2,5 

games: 
1,game1 
2,game2 
3,game3 
4,game4 
5,game5 

После нормализуют вы можете выполнить эту ведьму запрос дает вам именно то, что вы хотите

SELECT users.user_id, users.user_name, GROUP_CONCAT(games.game_names) 
FROM users INNER JOIN users_games ON users.user_id=users_games.user_id 
INNER JOIN games ON users_games.game_id = games.game_id GROUP BY users.user_id 

Я не пытаюсь выполнить запрос, но он должен работать

EDITED:

Acording к @ShaktiPatel вы можете использовать FIND_IN_SET, (я не знаю о функции FIND_IN_SET) с GROUP_CONCAT:

SELECT users.*,GROUP_CONCAT(games.game_names) 
FROM users 
INNER JOIN games ON FIND_IN_SET(games.id,users.games) GROUP BY users.id 
+0

Нужно ли мне менять структуру таблицы – PonrajPaul

+0

Очень рекомендуется, если вы не можете его изменить, тогда вы должны использовать запрос, предоставленный Shakti Patel , я отредактирую свой ответ с модификацией его запроса – Sal00m

+0

Я пробовал с измененным кодом ур. Но никаких изменений. Я проверил свой массив во время цикла. Мне нужно что-то изменить в этой области? – PonrajPaul

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