Как получить результат двух операторов выбора в одной строке?

Я использую две избранные оценки на странице php следующим образом:

$num1 = mysql_query("SELECT SId FROM mtable WHERE Pathogen='$pathogen1' && Topic='$topic1' && Indicator='$ind1' && IndicatorSubGroup='$subind1' ");

а также

$num2 = mysql_query("SELECT SId FROM mtable WHERE Pathogen='$pathogen2' && Topic='$topic2' && Indicator='$ind2' && IndicatorSubGroup='$subind2' ");

в настоящее время результат отображается с использованием отдельных циклов while следующим образом

while($nval=  mysql_fetch_array($num1))
{
    $vv=$nval['SId'];

    $result = mysql_query("SELECT * FROM mtable WHERE SId='$vv'");

    while($row = mysql_fetch_array($result))
    {
        print "<tr height='18'>";
        print "<td width=200 align=left>" . $row['Country'] . "</td>";
        print "<td width=70 align=center>" . $row['MidEstimate'] . "</td>";
        print "<td width=70 align=center>" . $row['LowEstimate'] . "</td>";
        print "<td width=70 align=center>" . $row['HighEstimate'] . "</td>";
        print "<td width=89 align=center>" . $row['StudyLocation'] . "</td>";
        print "<td width=139 align=center>" . $row['ReferenceID'] . "</td>";
        print "<td width=89 align=center>" . $row['Quality'] . "</td>";
        print "<td width=89 align=center>" . $row['Relevance'] . "</td>";
        print "<td width=61><a href='/sites/default/files/popupboxCD.php?SId=$vv' onClick='openpopup(this.href);return false;'>".$row['Info']."</a></td>";
        print "</tr>";
        print "<tr height='1'><td colspan='9' style='padding:0'><hr size='0.5' color='#CCCCCC' noshade='noshade' /></td></tr>";
    }
}

а также

$num2 = mysql_query("SELECT SId FROM mtable WHERE Pathogen='$pathogen2' && Topic='$topic2' && Indicator='$ind2' && IndicatorSubGroup='$subind2' ");
print $num2;

print "<table border='0' width='875' align='center'>

<tr><td colspan=5 height=10></td></tr>
<tr>
    <td width='200' bgcolor='#99CCF5' align='center'><b>Country</b></td>
    <td width='70' bgcolor='#99CCF5' align='center'><b>Mid</b></td>
    <td width='70' bgcolor='#99CCF5' align='center'><b>Low</b></td>
    <td width='70' bgcolor='#99CCF5' align='center'><b>High</b></td>
    <td width='89' bgcolor='#99CCF5' align='center'><b>Study Location</b></td>
    <td width='139' bgcolor='#99CCF5' align='center'><b>Reference</b></td>
    <td width='89' bgcolor='#99CCF5' align='center'><b>Quality</b></td>
    <td width='89' bgcolor='#99CCF5' align='center'><b>Relevance</b></td>
    <td width='61' ></td>
</tr>";

while($nval=  mysql_fetch_array($num2))
{
    $vv=$nval['SId'];

    $result = mysql_query("SELECT * FROM mtable WHERE SId='$vv'");

    while($row = mysql_fetch_array($result))
    {
        print "<tr height='18'>";
        print "<td width=200 align=left>" . $row['Country'] . "</td>";
        print "<td width=70 align=center>" . $row['MidEstimate'] . "</td>";
        print "<td width=70 align=center>" . $row['LowEstimate'] . "</td>";
        print "<td width=70 align=center>" . $row['HighEstimate'] . "</td>";
        print "<td width=89 align=center>" . $row['StudyLocation'] . "</td>";
        print "<td width=139 align=center>" . $row['ReferenceID'] . "</td>";
        print "<td width=89 align=center>" . $row['Quality'] . "</td>";
        print "<td width=89 align=center>" . $row['Relevance'] . "</td>";
        print "<td width=61><a href='/sites/default/files/popupboxCD.php?SId=$vv' onClick='openpopup(this.href);return false;'>".$row['Info']."</a></td>";

        print "</tr>";
        print "<tr height='1'><td colspan='9' style='padding:0'><hr size='0.5' color='#CCCCCC' noshade='noshade' /></td></tr>";
    }
}

Я хотел бы знать, есть ли способ объединить эти две таблицы в одну таблицу?

Результат должен выглядеть так:

Значение1(общее для обоих запросов., Например, страна), Значение2(из первого запроса), Значение2(из второго запроса)

Я получил только одну таблицу в MySQL, которые оба запроса показывают результаты.


Извините, мой вопрос смущает всех. Я Lotus Notes Developer, а не PHP. Так что я только начинающий пользователь в sql.

Здесь я повторяю свой запрос снова...

В настоящее время я получил две таблицы отображения результатов двух запросов из одной таблицы. Я хочу смешать эти результаты в одной таблице?

То есть моя новая таблица должна иметь три столбца. Первый с общим значением из обеих таблиц и второй столбец из второго столбца первой таблицы и третий столбец из второго столбца второй таблицы. Второй и третий столбцы в новой таблице отображают данные из того же столбца из основных данных mysql.

Надеюсь, что это намного лучше, спасибо за все предложения. Я попробую это сам, и если получится, я опубликую это здесь.

3 ответа

С СОЮЗОМ

( SELECT * FROM mtable WHERE SId= ? ) UNION (SELECT * FROM mtable WHERE SId= ?)

Если я правильно понял, что вы имели в виду, обратите внимание, что в этом случае для этого простого условия вы можете просто выполнить:

SELECT * FROM mtable WHERE SId= ? OR SId = ?

Извините, но я не могу следить за тем, какой вывод / результат вы ищете. Я не могу интерпретировать, что вы подразумеваете под "результатом должно быть в одной таблице (страница php) страна, средняя оценка (из 1-го запроса), средняя оценка (из 2-го запроса) страна, средняя оценка (из 1-го запроса), средняя оценка (из 2-го запроса) запрос) страна, средняя оценка (из 1-го запроса), средняя оценка (из 2-го запроса) и т. д. "

В любом случае, я думаю, вам не нужно запускать первый оператор SELECT для получения mtable.SId, а затем другие множественные SELECT (в цикле) для чтения других столбцов из mtable.

Я думаю, что приведенный ниже один запрос должен работать, так как он объединяет два ваших запроса и возвращает один набор результатов:

SELECT * FROM mtable 
WHERE (Pathogen='$pathogen1' && Topic='$topic1' && Indicator='$ind1' && IndicatorSubGroup='$subind1')
OR (Pathogen='$pathogen2' && Topic='$topic2' && Indicator='$ind2' && IndicatorSubGroup='$subind2');

Ваши два запроса:

  1. $num1 = mysql_query("SELECT SId FROM mtable WHERE Pathogen='$pathogen1' && Topic='$topic1' && Indicator='$ind1' && IndicatorSubGroup='$subind1' ");
  2. $num2 = mysql_query("SELECT SId FROM mtable WHERE Pathogen='$pathogen2' && Topic='$topic2' && Indicator='$ind2' && IndicatorSubGroup='$subind2' ");

Они отличаются только WHERE часть. Вы можете объединить их, сгруппировав их вместе с OR:

mysql_query("
SELECT SId FROM mtable 
  WHERE
    (
      Pathogen='$pathogen1' && Topic='$topic1' 
      && Indicator='$ind1' && IndicatorSubGroup='$subind1'
    )
    OR
    (
      Pathogen='$pathogen2' && Topic='$topic2' 
      && Indicator='$ind2' && IndicatorSubGroup='$subind2'
    )
");

WHERE part - это выражение, которое также задокументировано в руководстве Mysql: Синтаксис выражения. Есть несколько способов выразить то, что вы ищете, пример выше - только один.

Если вам нужна более общая информация о SELECT Заявление, это задокументировано здесь: SELECT Синтаксис.


Сначала я подумал, что это похоже на работу для JOIN, но потом я увидел, что у вас есть только одна таблица с именем mtable только, так что объединение или объединение вообще не нужно, вы можете написать это с помощью простого запроса на выборку по одной таблице:

SELECT * FROM mtable WHERE Pathogen='$pathogen2' AND Topic='$topic2' AND Indicator='$ind2' AND IndicatorSubGroup='$subind2'

вместо. Он должен вернуть все интересующие вас записи.

Ваш запрос

mtable содержит столбцы, такие как country, midestimate и т. д. Два оператора select выбирают одну и ту же таблицу с разными параметрами. и результат должен быть в одной таблице (страница php): страна, средняя оценка (из 1-го запроса), средняя страна (из 2-го запроса) страна, средняя оценка (из 1-го запроса), средняя страна (из 2-го запроса) страна, средняя оценка (из 1-го запроса), средняя оценка (из 2-го запроса) и так далее. Спасибо за ответ - Гопипули 42 минуты назад

Вы просили объединить эти два запроса в один. Это возможно Вы пишете, у вас есть два выбора. Я пытаюсь собрать их из вашего вопроса:

  1. $num1 = mysql_query("SELECT SId FROM mtable WHERE Pathogen='$pathogen1' && Topic='$topic1' && Indicator='$ind1' && IndicatorSubGroup='$subind1' ");
  2. `$ num2 = mysql_query (" ВЫБЕРИТЕ СИМВОЛ ИЗ mtable, ГДЕ Pathogen='$pathogen2' && Topic='$topic2' && Indicator='$ind2' && IndicatorSubGroup='$subind2' ");

Эти два запроса имеют некоторую часть


Если вам нужно взять данные из двух или более таблиц:

Как написано, сначала звучит как JOIN мне. С помощью объединений вы можете объединять данные из нескольких таблиц в результате на основе ссылок между ними. Ссылки должны быть сформулированы в запросе.

Более общее объяснение дано в Википедии, у руководства Mysql есть синтаксис.

SELECT * FROM t1 LEFT JOIN t2 ON t2.a=t1.a

Это выбирает все поля из обеих таблиц t1 и стол t2 для каждого продукта, в котором t2.a равняется t1.a,

Вы можете добавить предложение where в конце, если оно и, естественно, вы можете заменить * только с теми именами столбцов, которые вы хотите вернуть. Поскольку у вас теперь есть две таблицы, вам нужно добавить префикс столбцов к его префиксу таблицы, если у вас есть повторяющиеся имена столбцов с таблицами, в противном случае Mysql не будет знать, какую из них выбрать.

Другие вопросы по тегам