Здравствуйте. Вот собственно вопрос: Есть две таблицы в БД. Одна с пользователями в которой есть колонка Группа. Там стоит айди группы пользователя. В Таблице с группами есть колонка Экшн в которой через запятую без пробелов прописано что может делать группа на сайте (добавлять новости, видеть те или инные страницы и т.д.). Есть таблица Описание действий в которой есть Экшн и на русском пояснение Экшина. Я вытягиваю запросом из БД список действий для всех груп и хочу чтоб на страничке вместо действий было описание действий на русском. Уперся в проблему как сопоставить два массива и вывести только те данные которые подходят к группе пользователя.
Выкладывай структуру с данными и примерами своих запросов на http://sqlfiddle.com/ так тебе будет легче всего помочь.
Код (PHP): $selgrups=mysql_query("SELECT * FROM `user_group` "); //Тянем все что есть в таблице с группами (id,name,actions(тут news_special,add_agents,add_users) $sel_name_actions=mysql_query("SELECT action FROM `name_actions`"); //тут описание actions (id, name(Например:Добавить пользователя), action(Например: add_users) while ($row = mysql_fetch_array($selgrups)) { $action=explode(",",$row['actions']); // разбиваю на строчки } Вот исходя из кода мне нужно сравнить actions из первого запроса с action из второго запроса и если есть одинаковые значения то только к ним вывести name из второго запроса. PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color][size=85][color=green]Добавлено спустя 6 минут 20 секунд:[/color][/size]Все можно было бы сделать проще по типу [code=php]if ($action[0]==add_user) ... Но тут есть нюанс. Мне нужно универсальное решение чтоб можно было добавлять другие группы пользователей, менять им права доступа и чтоб все это было автоматизировано и без вмешания в код системы
Какие именно данные нужны?после // есть пример строчек из БД. JOIN не поможет так как в таблице user_group есть колонка actions а в ней все данные записаны вот так: news_special,add_news,add_admins,add_co,add_regions,add_assist,add_agents,add_users,add_clients,peredacha_regionam,peredacha_agentam,list_all_users,list_usersgrupa_1,list_usersgrupa_2,list_usersgrupa_3,list_usersgrupa_4,list_usersgrupa_5,list_usersgrupa_6,change_group_rules,add_group_rules Тут то и стоит задача: 1) Разобрать даную строчку по частям (разделитель запятая) 2) Вытянуть из name_actions названия действий 3) Сопоставить 1) с 2) 4) Вывести на страницу на русском язике обозначение действий если они совпали как в примере выше. Добавлено спустя 4 минуты 20 секунд: Тут нужно решение с массивами вот только какое пока не могу понять
давайте отойдем сейчас от моей БД и представим себе что у нас есть некая запись в БД типа "news_special,add_news,add_admins,add_co,add_regions,add_assist,add_agents" и есть запись в другой таблице "add_admins". Нам нужно вывести на страничку только те значения которые есть и в одной и в другой таблице. Как сделать так?
Я бы строку с запятыми разбил на отдельные записи, если оставить всё как есть, то видимо тут поможет поиск по тексту LIKE.
Вот, правильно, на отдельные записи. Только я решил разбить на отдельные записи уже результат запроса. Тоесть я постучал в базу, попросил отдать мне ячейку с "news_special,add_news,add_admins,add_co,add_regions,add_assist,add_agents", потом с помощю explode я разбил запись на отдельные данные которые сейчас в массиве. Теперь постает вопрос, как вытянуть данные из БД с другой таблицы, засунуть их в массив и потом сопоставить два массива на наличие одинаковых данных? Добавлено спустя 6 минут 37 секунд: Вот уже есть два массива: array(20) { [0]=> string(12) "news_special" [1]=> string(8) "add_news" [2]=> string(10) "add_admins" [3]=> string(6) "add_co" [4]=> string(11) "add_regions" [5]=> string(10) "add_assist" [6]=> string(10) "add_agents" [7]=> string(9) "add_users" [8]=> string(11) "add_clients" [9]=> string(18) "peredacha_regionam" [10]=> string(17) "peredacha_agentam" [11]=> string(14) "list_all_users" [12]=> string(17) "list_usersgrupa_1" [13]=> string(17) "list_usersgrupa_2" [14]=> string(17) "list_usersgrupa_3" [15]=> string(17) "list_usersgrupa_4" [16]=> string(17) "list_usersgrupa_5" [17]=> string(17) "list_usersgrupa_6" [18]=> string(18) "change_group_rules" [19]=> string(15) "add_group_rules" } Array ( [0] => news_special [1] => add_news [2] => add_admins [3] => add_co [4] => add_regions [5] => add_assist [6] => add_agents [7] => add_users [8] => add_clients [9] => peredacha_regionam [10] => peredacha_agentam [11] => list_all_users [12] => list_usersgrupa_1 [13] => list_usersgrupa_2 [14] => list_usersgrupa_3 [15] => list_usersgrupa_4 [16] => list_usersgrupa_5 [17] => list_usersgrupa_6 [18] => add_group_rules [19] => change_group_rules ) Как вытянуть общие записи???
кто это месиво будет читать? Вытянуть данные из массивов? Можно перебрать через foreach и сравнивать. https://secure.php.net/manual/ru/ref.array.php array_diff
Ну месиво лишь для наглядности. Словом прошол я на шажочек вперед. С помощю Код (PHP): $result = array_intersect($action, $arr); Я нашел совпадения из двух массивов. Теперь мне эти совпадения нужно перевести в переменные и потом сделать запрос в БД в котором WHERE id='переменной которую я сейчас хочу добыть Что посоветует добрый люд?'
Тут один из вариантов недопонимание или что-то делаешь не оптимальным образом. совпадения это текст, пример покажи хочешь сделать запрос в БД, как в БД хранятся данные эти данные в исходном коде можно с отступами скопировать, или обернуть в тег pre для HTML.
Пробую еще раз с самого начала. Таблица №1user_group) id name actions 1 Admins news_special,add_news,add_admins,add_co 2 Users news_special,add_news 3 Other news_special Таблица №2 (name_actions) id name action 1 Добавление админа add_admin 2 Новости news_special 3 Добавление новости add_news 1.Создаю страницу на которой можно видеть права той или иной группы. 2.Вывожу на страницу с Таблица №1 колонку actions 3.Выглядит не красиво. Нужно чтоб было на русском 4. Разбиваю с помощю explode колонку actions на отдельные строки: Код (PHP): $selgrups=mysql_query("SELECT * FROM `user_group` WHERE id='1'"); while ($row = mysql_fetch_array($selgrups)) { $action=explode(",",$row['actions']); } 5. Вывожу в виде массива данные из второй таблицы Код (PHP): $sel_name_actions=mysql_query("SELECT action FROM `name_actions`"); $arr = array(); while($rows = mysql_fetch_row($sel_name_actions)){ $arr[] = $rows[0]; } 5. Сравниваю значения: Код (PHP): $result = array_intersect($action, $arr); 6.Теперь нужно присвоить значениям массива $result какуето переменную чтоб можно было сделать поиск в Таблице №2 по типу : Код (PHP): SELECT name FROM `name_actions` WHERE action='$result' 7. Курю бамбук. Так понятней? Добавлено спустя 10 минут: Словом разобрался сам. Спасибо за подсказку с foreach. Все заработало как надо
Если захочешь переделывать https://ru.wikipedia.org/wiki/%D0%A3%D0%BF%D1%80%D0%B0%D0%B ... 0%B5%D0%B9