Как получить результат двух операторов выбора в одной строке? - PullRequest
1 голос
/ 14 июня 2011

Я использую две выбранные оценки на странице 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 ]

4 голосов
/ 14 июня 2011

с UNION

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

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

2 голосов
/ 14 июня 2011

Извините, но я не могу следить за тем, какой вывод / результат вы ищете.Я не могу интерпретировать то, что вы подразумеваете под «результатом должно быть в одной таблице (страница php) страна, средняя оценка (из 1-го запроса), средняя оценка (из 2-го запроса) страна, средняя оценка (из 1-го запроса), средняя оценка (из 2-го запроса)query) страна, midestimate (из 1-го запроса), midestimate (из 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 голос
/ 14 июня 2011

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

  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 - это выражение, которое также задокументировано в руководстве по 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 WHERE 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 не будет знать, какую из них выбрать.

...