Как добавить 2 таблицы с несколькими столбцами таблицы? - PullRequest
0 голосов
/ 25 апреля 2020

У меня 2 таблицы с одним и тем же спонсором поля. Я пытаюсь получить данные из обеих таблиц.

Когда я пытаюсь получить данные из одного столбца, он работает правильно, например:

$q1 = "
SELECT username 
  FROM member_master 
 WHERE sponsor = 'user1' 
 UNION 
SELECT fname 
  FROM upgrade_master 
 WHERE sponsor = 'user1'
";

Но когда я добавляю больше столбцов в запрос, это дает ошибку mysqli_num_rows () ожидает, что параметр 1 будет mysqli_result , логическое значение дано в C: \ xampp \

Это мой код:

<?php
require("connect.php");
$q1 = "SELECT username FROM member_master WHERE sponsor='user1' UNION SELECT fname, lname FROM upgrade_master WHERE sponsor='user1'";
$e1 = mysqli_query($connection, $q1);
if(mysqli_num_rows($e1)>0)
{   
    echo '<table><tr>';
    while($row = mysqli_fetch_assoc($e1))
    {
    $username = $row['username'];
    $fname = $row['fname'];
    $lname = $row['lname'];
    echo '<td>'. $username . '</td>';
    echo '<td>'. $fname . '</td>';
    echo '<td>'. $lname . '</td>';
    }
    echo '</tr></table>';

}
?>

Ответы [ 3 ]

1 голос
/ 25 апреля 2020

UNION требует, чтобы оба запроса возвращали одинаковое количество столбцов. Вы можете объединить 2 столбца 2-го запроса с 1-м столбцом:

SELECT username 
FROM member_master 
WHERE sponsor='user1' 
UNION 
SELECT concat(fname, ' ', lname) 
FROM upgrade_master 
WHERE sponsor='user1'

или добавить в 1-м запросе столбец dummy null:

SELECT username, null lname 
FROM member_master 
WHERE sponsor='user1' 
UNION 
SELECT fname, lname 
FROM upgrade_master 
WHERE sponsor='user1'

Также обратите внимание, что UNION ALL всегда лучше для производительности, если вы не хотите, чтобы дубликаты отфильтровывались, что и делает UNION.

1 голос
/ 25 апреля 2020

Я думаю, что вам нужно использовать JOIN вместо UNION для этого. Попробуйте следующее:

SELECT mm.username, um.fname, um.lname FROM member_master mm  JOIN upgrade_master um ON mm.sponsor = um.sponsor where mm.sponsor = 'user1';

Объединение - это когда вы хотите извлечь одно похожее поле из двух таблиц и перечислить все значения для этого поля. Вот почему он работает только с одним столбцом.

0 голосов
/ 25 апреля 2020

Вы должны использовать INNER JOIN, чтобы сделать это

"SELECT member_master.username, upgrade_master.fname, upgrade_master.lname FROM member_master INNER JOIN upgrade_master ON member_master.sponsor = upgrade_master.sponsor WHERE member_master.sponsor='user1'"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...