2014-10-24 6 views
0

Мне нелегко ловить голову в гнездо этих SELECT, чтобы использовать только один запрос для извлечения необходимых мне данных!Упрощение множественных вложенных запросов на выбор MYSQL

Мне нужно найти и вернуть строку в таблице композиций, которая имеет самую последнюю дату, которая была раньше даты загрузки в таблице нагрузок.

Это работает, но я должен быть в состоянии сделать это в одном запросе:

$sql = "SELECT * FROM loads JOIN generators ON gen_key =gen_id "; 
$sql.=" WHERE field_id= ".$fieldcode; 
$sql.=" ORDER BY load_date DESC,load_time DESC "; 
$result=mysqli_query($db_connection,$sql); 
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) { 
$sql2 = "SELECT * FROM (SELECT * FROM composition WHERE comp_date <= '".$row[load_date]."' AND gen_id =".$row[gen_id]." ORDER BY comp_date ASC) as T1 ORDER BY comp_date DESC LIMIT 1"; 
$result2=mysqli_query($db_connection,$sql2); 
$row2 = mysqli_fetch_array($result2, MYSQLI_ASSOC); 
// Output $row[] and $row2[] data 
} 

спасибо за любую помощь!

+0

Databse звонки внутри цикла, как правило, не очень хорошая идея. Вы должны быть в состоянии сделать соединение и достичь желаемого результата – Jaime

ответ

0

Если вы хотите минимизировать свои запросы с PHP на SQL, вы можете использовать хранимые процедуры. В основном они быстро обматывают вашу голову. Если вы будете следовать этому краткое руководство по данной теме вы бы идти в кратчайшие сроки (просто я): http://www.mysqltutorial.org/mysql-stored-procedure-tutorial.aspx

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

Например, вы могли бы обернуть вышеуказанные SQL-вызовы (более или менее, поскольку они стоят в вашем коде) в Хранимой процедуре, скажем $sql = "call getGenerators(".$gen_id.");";, и результат будет таким, какой вы выбрали в хранимой процедуре, которая будет возвращена.

Сохраненные процедуры отлично подходят для сбора данных, как в вашем случае, но менее велики при выполнении жестких логик (а это не так).

Надеюсь, это поможет.

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