{% else-1 %}
Обновить | Подписаться | Поднять тему
Чтобы выполнить действие авторизируйтесь или пройдите регистрацию на сайте.
1.
SV * 2.63
[автор] (25 мар 2017, 19:13) [0/0] [0] [отв] [спам] [под] +1 | -1

Задача такова:
Имеется таблица "duel", с полями id, user_id, ank_id.
Выводится циклом, и в каждой итерации по два запроса, один запрашивает login с таблицы users по id, который user_id, второй запрашивает login по id, который ank_id. Но это же извращение. Как мне получить логины в одном запросе с дуэлями ?
По какому принципу это делается? например получил вывод с "duel"
id | user_id | ank_id
1 | 123 | 456
2 | 312 | 654
А кроме этого получить только логины от id 123, 312, 456,654 с таблицы "users" в одном запросе. чтобы вывести
1 | Вася | Петя
2 | Коля | Миша
Перечитал кучу примеров выборок, сплошные извращения разными методами. А как по минимуму?

2.
bibilink * 19.01
(25 мар 2017, 19:15) [0/0] [0] [отв] [спам] [под] +1 | -1

Читай про LEFT JOIN, вроде ты уже спращивал про подобное.

3.
SV * 2.63
[автор] (25 мар 2017, 19:40) [0/0] [0] [отв] [спам] [под] +1 | -1

bibilink, тогда была сортировка по количеству комментариев, а сейчас не сортировка, а получение логинов для определенных id

4.
bibilink * 19.01
(25 мар 2017, 19:40) [0/0] [0] [отв] [спам] [под] +1 | -1

SV, Наведу пример с моего скрипта.
SELECT commands.name as user1, (SELECT name FROM commands WHERE id = players.id_command) as user2 FROM commands LEFT JOIN players ON commands.id = players.id_command

В результате два поля (логина) в ответе.
user1 и user2

5.
SV * 2.63
[автор] (25 мар 2017, 19:46) [0/0] [0] [отв] [спам] [под] +1 | -1

bibilink, а таблица пользователей в данном случае какая?

6.
bibilink * 19.01
(25 мар 2017, 19:49) [0/0] [0] [отв] [спам] [под] +1 | -1

SV, commands, а влженный запрос..
SELECT name FROM commands WHERE id = players.id_command
где players.id_command это duel.ank_id , т.е поиск второго юзера дуели

7.
SV * 2.63
[автор] (25 мар 2017, 23:03) [0/0] [0] [отв] [спам] [под] +1 | -1

bibilink, игрался, методом тыка перебирал и менял всё местами. Кучу undefined выкидывает. Ну этот запрос и не подойдет, так как
таблица "duel"
id | id_user | id_ank | cel
Надо получить
login с таблицы "users" по id = id_user
login с таблицы "users" по id = id_ank
name с таблицы "duel_raz" по id = cel

Это в одном запросе реально совместить?

8.
bibilink * 19.01
(25 мар 2017, 23:49) [0/0] [0] [отв] [спам] [под] +1 | -1

SV, короче, заполни нужные таблицы данными (через скрипт или как), сделай sql бекап и скинь сюда.
Если будет время, то завтра сделаю.

9.
SV * 2.63
[автор] (26 мар 2017, 13:21) [0/0] [0] [отв] [спам] [под] +1 | -1

bibilink, Сделал без джойнов

$duel = $db->query("SELECT duel.*, users.login, duel_raz.name FROM duel, users, duel_raz WHERE duel.id_user = users.id AND duel.cel = duel_raz.id"*;

print_r выдает

Array ( [id] => 1 [id_user] => 1 [id_ank] => 2 [cel] => 1 [pob] => 0 [sogl] => 1 [time] => 2147483647 [login] => SV [name] => Кто красивее? )

Осталось еще как-то впихнуть туда подзапрос на users.login WHERE duel.id_ank = users.id AS login2


$duel = $db->query("SELECT (SELECT users.login FROM duel, users WHERE duel.id_ank = users.id) AS login2 , duel.*, users.login, duel_raz.name FROM duel, users, duel_raz WHERE duel.id_user = users.id AND duel.cel = duel_raz.id"*;

Работает. Я ничего лишнего не написал, не?))
Может чет надо выбросить за ненадобностью?

10.
bibilink * 19.01
(26 мар 2017, 14:05) [0/0] [0] [отв] [спам] [под] +1 | -1

Посмотри https://youtu.be/EHvzvwAv7RU
Чтобы понять почему такой вариант хуже, если без join.

Чтобы писать сообщения авторизируйтесь или пройдите регистрацию на сайте.
Подписаны: 0
Скачать тему | Файлы темы | Фильтр сообщений