Как получить результат двух операторов выбора в одной строке?
Я использую две избранные оценки на странице 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');
Ваши два запроса:
$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' ");
Они отличаются только 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 минуты назад
Вы просили объединить эти два запроса в один. Это возможно Вы пишете, у вас есть два выбора. Я пытаюсь собрать их из вашего вопроса:
$num1 = mysql_query("SELECT SId FROM mtable WHERE Pathogen='$pathogen1' && Topic='$topic1' && Indicator='$ind1' && IndicatorSubGroup='$subind1' ");
- `$ 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 не будет знать, какую из них выбрать.