2016-05-09 2 views
-1

Совершенно новый для всего материала SQL/PHP - проваливался с базовыми запросами и выводил их на PHP ранее, но теперь пытается что-то более сложное и надеется, что кто-то может помочь с этим, поскольку я пытался работать его без везения до сих пор:Объедините несколько запросов, чтобы получить ответ на одну сумму

У меня 2 MS SQL таблицы:

Таблица 1 - разломы

faultid ... requestnumber 
1 ...........  6 
2 ...........  5 
3 ...........  6 

Таблица 2 - действия

faultid ....who .....  when...... timetaken 
1..........  John....... Mon.........  1.00 
2..........  Peter...... Mon..........  2.00 
3..........  Luke....... Tues........ 1.00 
2..........  John....... Tues........  0.5 
1..........  Mike....... Mon.........  0.75 

То, что я пытаюсь добиться, это создать переменную можно использовать в основе веб-страницы, передний конец PHP, который получает сумму TimeTaken столбца в таблице 2, где requestnumber в таблице 1 равно конкретный число (т.е. 6)

Я предполагаю, что он начнет что-то вроде:

$sql1 = "select faultid FROM Faults WHERE requestnumber = '6'"; 
    $sqlresult = sqlsrv_query($conn, $sql1); 
    while ($row = sqlsrv_fetch_array($sqlresult)){ 
} 

После этого я получаю немного застрял. Как я беру каждый результат из этого, а затем запускаю другой запрос, чтобы получить сумму столбца timetaken в Таблица 2 только для соответствующих ошибок? Я хочу поставить под угрозу использование foreach, но не уверен в синтаксисе (или даже если я правильно догадываюсь).

Итак, в этом примере я бы получил результат 2.75 как переменную в PHP.

Любая помощь будет оценена по достоинству. Заранее спасибо.

Энди

+0

Также думал, что я мог бы получить результат, используя только SQL запрос типа: SELECT SUM (TimeTaken) от действий WHERE faultid = (выберите Faultid из Неисправности WHERE requestnumber = '6'); но это просто приводит к ошибке относительно слишком большого количества результатов. – Morty500

+0

один выбор с соединением должен работать –

ответ

0

Лучше всего использовать только один SQL-заявление

$sql = 'SELECT SUM(t2.timetaken)'; 
$sql .= ' FROM Faults t1 INNER JOIN actions t2 ON (t2.faultid = t1.faultid)'; 
$sql .= ' WHERE t1.requestnumber = ?'; 

Используйте это как подготовленное заявление и передать ваши requestnumber (6 или что-то) в качестве аргумента при выполнении этого заявления.

Чтобы получить все или несколько сумм, которые можно использовать группу, (возможно, в сочетании с WHERE):

SELECT t1.requestnumber, SUM(t2.timetaken) 
FROM Faults t1 
INNER JOIN actions t2 ON (t2.faultid = t1.faultid) 
GROUP BY t1.requestnumber 

Edit:
Согласно вашему собственному комментарию, вы можете использовать SELECT, с подзапроса, но использование IN, нет =. При использовании '=' подзапрос должен возвращать только одну строку.

select SUM (timetaken) FROM actions WHERE faultid IN (select Faultid from Faults WHERE requestnumber = '6') 
--            ^^ 

Но этот путь, как правило, медленнее, чем я написал выше

+0

Удивительно, что отлично работало. Большое спасибо за помощь :) – Morty500

Смежные вопросы