SELECT
table1.*
, table2.*
INNER JOIN table2 ON table2.SomeFkId = table1.SomeId
, Который получает Вас набор результатов, где дочерние строки в table2 вызывают дублирование путем возврата результатов table1 для каждой дочерней строки в table2. Картопостроители O/R должны дифференцировать table1 экземпляры на основе поля уникального ключа, затем использовать все table2 столбцы для заполнения дочерних экземпляров.
SELECT table1.*
SELECT table2.* WHERE SomeFkId = #
N+1 - то, где первый запрос заполняет основной объект, и второй запрос заполняет все дочерние объекты для каждого из уникальных основных возвращенных объектов.
Рассмотрите:
class House
{
int Id { get; set; }
string Address { get; set; }
Person[] Inhabitants { get; set; }
}
class Person
{
string Name { get; set; }
int HouseId { get; set; }
}
и таблицы с подобной структурой. Единый запрос для адреса "Valley St, 22", может возвратиться:
Id Address Name HouseId
1 22 Valley St Dave 1
1 22 Valley St John 1
1 22 Valley St Mike 1
O/RM должен заполнить экземпляр Дома с ID=1, Адрес = "Valley St, 22", и затем заполнить массив Жителей с Людьми экземпляры для Dave, John и Mike со всего одним запросом.
А запрос N+1 для того же адреса, используемого выше, привел бы к:
Id Address
1 22 Valley St
с отдельным запросом как [1 113]
SELECT * FROM Person WHERE HouseId = 1
и приводящий к отдельному набору данных как [1 114]
Name HouseId
Dave 1
John 1
Mike 1
и конечный результат, совпадающий с выше с единым запросом.
преимущества для единственного выбора состоят в том, что Вы получаете все данные впереди, которые могут быть тем, чего Вы в конечном счете требуете. Преимуществами для N+1 является сложность запроса, уменьшается, и можно использовать ленивую загрузку, где дочерние наборы результатов только загружаются по первому запросу.
как насчет этого:
$query = "SELECT EXISTS (SELECT * FROM goals WHERE goal_ID='$obj_id' AND user_ID='$user_id')";
return mysql_query($query) ? false : true;
Подсчет количества строк, соответствующих критериям, должен быть проще:
$sql = SELECT COUNT(*) FROM goals WHERE goal_ID='$obj_id' AND user_ID='$user_id'
$query = mysql_query($sql);
$result = mysql_fetch_row($query);
return $result[0] >= 1;