Выберите все строки из 2 таблиц, где поле =?

Проще говоря, мне нужен оператор MySQL, который выбирает все строки из 2 разных таблиц where userId = 1, Вот утверждение, которое я имею, но оно не работает. Возвращает результаты из таблицы 1 (левая таблица):

$transactionsQ = $db->query("select e.sender, e.amount, e.timestamp, s.sender, s.recipient, s.amount, s.timestamp from ethTransactions as e, sofTransactions as s where e.userId = ? or s.userId = ?", [$currentUser->id, $currentUser->id]);

Таблица1 (ethTransactions) похожа на:

|id|userId|sender|amount|timestamp|

table2 (sofTransactions) похож на:

|id|userId|sender|recipient|amount|timestamp|

некоторые данные об этТранзакциях:

1|12|ajdoaidjoiwjdaq|0.03222|2017-11-08 03:09:11

некоторые данные о софтранзакциях:

1|12|opiyptropyirpyi|dqwuebhdnwq|1.02223|2017-10-08 04:09:11

Что я хочу вернуть, так как оба имеют одинаковый идентификатор пользователя:

|id|userId|sender         |recipient  |amount |timestamp          |
|1 |12    |ajdoaidjoiwjdaq|           |0.03222|2017-11-08 03:09:11|
|1 |12    |opiyptropyirpyi|dqwuebhdnwq|1.02223|2017-10-08 04:09:11|

0

Решение

Вы должны использовать ЛЕВЫЙ РЕЙТИНГ сделать это.

  SELECT
e.sender as e_sender,
e.amount as e_amount,
e.timestamp as e_timestamp,
s.sender as s_sender,
s.recipient as s_recipient,
s.amount as s_amount,
s.timestamp as as_timestamp
FROM
ethTransactions e
LEFT JOIN
sofTransactions s ON s.userId = e.userId
WHERE
e.userId = ?
2

Другие решения

SELECT column_names(s) FROM table1 AS t1 **INNER JOIN** table2 AS t2
ON t1.userId = t2.userId WHERE t1.userId=1;
0

Есть что-то странное в структуре вашей базы данных. JOIN для идентификатора пользователя кажется естественным, но потенциально он объединяет строки из одной таблицы со строками из другой таблицы, которые имеют разные столбцы отправителя. Это будет означать, что вы объединяете элементы данных, которые не принадлежат друг другу.

Мой ответ на ваш вопрос: измените структуру таблицы, потому что вы нарушите одно из основных правил реляционных баз данных — скорее всего, дублирование данных.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector