Как проверить, возвращает ли SELECT EXISTS значение или нет?

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 является сложность запроса, уменьшается, и можно использовать ленивую загрузку, где дочерние наборы результатов только загружаются по первому запросу.

26
задан Jacek Laskowski 24 August 2014 в 21:47
поделиться

2 ответа

как насчет этого:

$query = "SELECT EXISTS (SELECT * FROM goals WHERE goal_ID='$obj_id' AND user_ID='$user_id')";

return  mysql_query($query) ? false : true;
0
ответ дан 28 November 2019 в 06:53
поделиться

Подсчет количества строк, соответствующих критериям, должен быть проще:

$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;
2
ответ дан 28 November 2019 в 06:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: