Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: SQL выборка с замещением

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
NeuroZ
Отправлено: 21 Августа, 2015 - 16:59:00
Post Id



Посетитель


Покинул форум
Сообщений всего: 393
Дата рег-ции: Апр. 2012  


Помог: 2 раз(а)




Подскажите, пожалуйста, а как можно сделать выборку с замещением ID на их значения из таблицы связей?
Т.е. имеем 2 таблицы.
В первой есть 4 поля: ID | id_1 | id_2 | id_3.
Вторая - это таблица связей:
id_1 | Москва
id_2 | Ростов
id_3 | Питер
как выбрать все значения из первой таблицы, но чтобы в результате, при выборке, вместо id_1, id_2, id_3 были города из таблицы связей: Москва, Ростов, Питер ?

(Отредактировано автором: 21 Августа, 2015 - 17:04:18)

 
 Top
DeepVarvar Супермодератор
Отправлено: 21 Августа, 2015 - 17:13:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




ЯННП
 
 Top
NeuroZ
Отправлено: 21 Августа, 2015 - 17:28:50
Post Id



Посетитель


Покинул форум
Сообщений всего: 393
Дата рег-ции: Апр. 2012  


Помог: 2 раз(а)




DeepVarvar пишет:
ЯННП

База 1:
ID | city_from | city_to | my_city
-------------------------------- ------
1 | 2 | 3 | 1
и т.д.

База 2:
ID | city
---------
1 | Москва
2 | Ростов
3 | Питер

Вот надо выбрать так, чтобы результат был массив:
CODE (htmlphp):
скопировать код в буфер обмена
  1. ['city_from'] => Ростов, ['city_to'] => Питер, ['my_city'] => Москва
 
 Top
Ex
Отправлено: 21 Августа, 2015 - 17:31:07
Post Id


Частый гость


Покинул форум
Сообщений всего: 189
Дата рег-ции: Июнь 2013  


Помог: 0 раз(а)




Сначала вытягиваешь всю инфу с 1 таблицы
После чего вытягиваешь названия городов по полученным ид (where id =?) со второй таблицs и вставляешь куда тебе нужно

А еще лучше, вывести сначала инфу со 2 таблицы, загнать в массив, а потом выводить инфу с 1 таблицы и заменять ид на названия со 2 таблицы

PHP:
скопировать код в буфер обмена
  1. № к примеру:
  2. $res = $db-> prepare('SELECT * FROM table_2');
  3. $res -> execute();
  4.  
  5. foreach ($res as $row) {
  6.     $city[$row['id']] = $row['city'];
  7. }
  8.  
  9.  
  10. $res = $db-> prepare('SELECT * FROM table_1');
  11. $res -> execute();
  12.  
  13. foreach ($res as $row) {
  14.     echo $city[$row['city_from']];
  15.     echo $city[$row['city_to']];
  16.     echo $city[$row['my_city']];
  17. }

(Отредактировано автором: 21 Августа, 2015 - 17:38:30)

 
 Top
NeuroZ
Отправлено: 21 Августа, 2015 - 17:39:40
Post Id



Посетитель


Покинул форум
Сообщений всего: 393
Дата рег-ции: Апр. 2012  


Помог: 2 раз(а)




Ex пишет:
Сначала вытягиваешь всю инфу с 1 таблицы
После чего вытягиваешь названия городов по полученным ид (where id =?) со второй таблицs и вставляешь куда тебе нужно

А еще лучше, вывести сначало инфу со 2 таблицы, загнать в массив, а потом выводить инфу с 1 таблицы и зменять ид на названия со 2 таблицы

PHP:
скопировать код в буфер обмена
  1. № к примеру:
  2. $res = $db-> prepare('SELECT * FROM table_2');
  3. $res -> execute();
  4.  
  5. foreach ($res as $row) {
  6.     $city[$row['id']] = $row['city'];
  7. }
  8.  
  9.  
  10. $res = $db-> prepare('SELECT * FROM table_1');
  11. $res -> execute();
  12.  
  13. foreach ($res as $row) {
  14.     echo $city[$row['city_from']];
  15.     echo $city[$row['city_to']];
  16.     echo $city[$row['my_city']];
  17. }

Это понятно, это просто. Выбрать 2 отдельных массива и через цикл заменить в одном из них значения. Но это не гуд идея. Хотелось бы сделать это всё на уровне выборки из БД.
 
 Top
Мелкий Супермодератор
Отправлено: 21 Августа, 2015 - 17:48:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Приджойнить одну и ту же таблицу трижды с разными алиасами. Вроде такого, только ещё раз джойн сделать:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT tt.name, tf.name
  2. FROM table2
  3. JOIN table1 tt ON tt.id=toID
  4. JOIN table1 tf ON tf.id=fromID


-----
PostgreSQL DBA
 
 Top
NeuroZ
Отправлено: 23 Августа, 2015 - 13:02:38
Post Id



Посетитель


Покинул форум
Сообщений всего: 393
Дата рег-ции: Апр. 2012  


Помог: 2 раз(а)




Мелкий пишет:
Приджойнить одну и ту же таблицу трижды с разными алиасами. Вроде такого, только ещё раз джойн сделать:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT tt.name, tf.name
  2. FROM table2
  3. JOIN table1 tt ON tt.id=toID
  4. JOIN table1 tf ON tf.id=fromID

Ага... встречал такое решение в интернете... Но думал, что есть что-то более логичное и изящное... Ну раз нет, то буду его юзать) спасибо)
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB