Создание SQL-запроса с операторами OR на основе того, установлены ли флажки или нет

Обновление 2015

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

С Git 2.5+ правильная команда:

git for-each-ref --format="%(refname:short) %(upstream:track)" refs/heads

Подробнее см. « Просмотр Unpushed Git Commits

g0] ".

(как указано void.pointer в , комментарии , upstream:track точнее, чем push:track, в зависимости от политика push по умолчанию )


Git 2.13 (Q2 2017) использует более общий API фильтра ref-фильтра с более полным git for-each-ref push :

См. commit 3d9e4ce , commit 949af06 , commit 56b4360 , commit 6eac70f , совершить 1a34728 , совершить 1a0ca5e , совершить 3a42980 , совершить 17938f1 , совершить 3ba308c , совершить a798410 , commit b180e6f , совершить 01f9582 , совершить 7743fcc , commit ffd921d , совершить 99c6a71 , совершить d4919bb , совершить 42d0eb0 , совершить 4f3e3b3 , совершить c58fc85 (10 Январь 2017 года) Karthik Nayak (KarthikNayak) . (Слияние с Junio ​​C Hamano - gitster - в совершить 93e8cd8 , 27 февраля 2017 г.)

push:

Название локального ref, который представляет местоположение @{push} для отображаемого ref. Соответствует параметрам :short, :lstrip, :rstrip, :track и :trackshort в качестве upstream. Производит пустую строку, если не настроено ref @{push} ref.

Если добавлено lstrip= (rstrip=), разделите компоненты с разделяемым косой чертой с фронта (назад) (например, %(refname:lstrip=2) поворачивает refs/tags/foo на foo, а %(refname:rstrip=2) поворачивает refs/tags/foo на refs).

Если - отрицательное число, разделите столько компонентов пути, сколько необходимо от указанного конца для выхода - компонентов пути (например, %(refname:lstrip=-2) поворачивает refs/tags/foo в tags/foo, а %(refname:rstrip=-1) поворачивает refs/tags/foo на refs)

blockquote>

Оригинальный ответ (2014)

Другой вариант будет доступен с Git 1.9 / 2/0 (Q1 2014). См. commit b28061c из Рамкумар Рамачандра (artagnon) :

for-each-ref: ввести %(upstream:track[short])

Представить :

  • %(upstream:track) отобразить «[ahead M, behind N]» и
  • %(upstream:trackshort) для отображения «=», «>», «< "или" <> "соответственно (вдохновлен contrib/completion/git-prompt.sh ).

Теперь вы можете использовать следующий формат для каждого из ссылок:

blockquote>
%(refname:short) %(upstream:trackshort)

для отображения ссылок с краткими данными отслеживания.

Обратите внимание, что :track и :trackshort работают только с "upstream" и ошибка при использовании с чем-либо еще.

blockquote>

1
задан Worthwelle 16 January 2019 в 19:30
поделиться

2 ответа

Так что, если я вас правильно понимаю, вам просто нужно написать что-то, чтобы объединить фрагменты оператора OR на основе битового массива. Вместо добавления ИЛИ для каждой записи, независимо от того, отмечена она или нет, сделайте что-то вроде

    first = true
    string orClause = ""
    array schoolTypes
    array checkedSchoolTypes

    for(i = 0; i < checkedSchoolTypes.length; i++)
        if(first && checkedSchoolTypes[i])
           orClause += "schools.schoolType = " + schoolTypes[i]
           first = false
        else if(checkedSchoolTypes[i])
             orClause += "OR schools.schoolType = " + schoolTypes[i]

   query = "This is your query" + orClause + "rest of your query"

* Обратите внимание, что это решение для школьного проекта, а не производственной среды. Если бы вы делали это в производственной среде, в этом случае вы бы хотели передать информацию через параметризованную хранимую процедуру и сгенерировать свое заявление в sql на основе информации, переданной из формы.

Вместо того, чтобы делать или, как вы предлагаете, вы могли бы сделать и оператор IN, поскольку другие предполагают, что код будет в основном таким же с другим форматом. Дайте мне знать, если вам нужны какие-либо разъяснения.

0
ответ дан jkramer 16 January 2019 в 19:30
поделиться

Если ваш столбец schools.schoolType имеет произвольный тип данных VARCHAR, должна существовать некоторая связь между данными, которые пользователь отправляет, и данными, используемыми в запросе, если вы заранее не определите список возможных значений. ]

Похоже, у вас есть какая-то связь между вашим массивом arrayTypes и значением

Если ваш столбец [112] имеет произвольный тип данных [113], должна существовать некоторая связь между данными, которые пользователь отправляет, и данными, используемыми в запросе, если вы заранее не определите список возможных значений. ]

Похоже, у вас есть какая-то связь между вашим массивом [114] и значением [115]. Таким образом, предполагая, что запрос требует HighSchool, это может быть обнаружено, если пользователь отправляет highschool, используя вашу функцию basictext().

Оттуда я бы сделал что-то вроде этого:

$selectedTypes = array();

foreach($arrayTypes as $arr)
{
    if(isSet(

Если ваш столбец schools.schoolType имеет произвольный тип данных VARCHAR, должна существовать некоторая связь между данными, которые пользователь отправляет, и данными, используемыми в запросе, если вы заранее не определите список возможных значений. ]

Похоже, у вас есть какая-то связь между вашим массивом arrayTypes и значением

Если ваш столбец [112] имеет произвольный тип данных [113], должна существовать некоторая связь между данными, которые пользователь отправляет, и данными, используемыми в запросе, если вы заранее не определите список возможных значений. ]

Похоже, у вас есть какая-то связь между вашим массивом [114] и значением [115]. Таким образом, предполагая, что запрос требует HighSchool, это может быть обнаружено, если пользователь отправляет highschool, используя вашу функцию basictext().

Оттуда я бы сделал что-то вроде этого:

[110]

Это заполнило бы массив selectedTypes соответствующими типами того, что отправляет пользователь.

Используя это, вы можете добавить предложение IN к вашему окончательному запросу.

$placeholders = implode(',', array_fill(0, count($selectedTypes), '?'));

$template = "SELECT schools.schoolId, 
                    schools.schoolName, 
                    villages.villageName 
               FROM schools, 
                    villages
              WHERE schools.villageId = villages.villageId
                AND schools.schoolType IN ($placeholders)";

$stmt = $pdo->prepare($template);
$stmt->execute($selectedTypes);
$result = $stmt->fetchAll();
$stmt = null;

Если selectedTypes содержит ["HighSchool", "MiddleSchool", "TradeSchool"], то $placeholders будет содержать [?, ?, ?]. Это используется для создания шаблона SQL для подготовленного запроса оператора с использованием массива selectedTypes в качестве входных данных.

$result должны иметь данные, которые вы ищете.

GET
. Таким образом, предполагая, что запрос требует HighSchool, это может быть обнаружено, если пользователь отправляет highschool, используя вашу функцию basictext().

Оттуда я бы сделал что-то вроде этого:

[110]

Это заполнило бы массив selectedTypes соответствующими типами того, что отправляет пользователь.

Используя это, вы можете добавить предложение IN к вашему окончательному запросу.

[111]

Если selectedTypes содержит ["HighSchool", "MiddleSchool", "TradeSchool"], то $placeholders будет содержать [?, ?, ?]. Это используется для создания шаблона SQL для подготовленного запроса оператора с использованием массива selectedTypes в качестве входных данных.

$result должны иметь данные, которые вы ищете.

GET[basictext($arr)])) { echo "[x] Type ".$arr." <br/>"; $selectedTypes[] = $arr; } else { echo "[ ] Type ".$arr." <br/>"; } }

Это заполнило бы массив selectedTypes соответствующими типами того, что отправляет пользователь.

Используя это, вы можете добавить предложение IN к вашему окончательному запросу.

$placeholders = implode(',', array_fill(0, count($selectedTypes), '?'));

$template = "SELECT schools.schoolId, 
                    schools.schoolName, 
                    villages.villageName 
               FROM schools, 
                    villages
              WHERE schools.villageId = villages.villageId
                AND schools.schoolType IN ($placeholders)";

$stmt = $pdo->prepare($template);
$stmt->execute($selectedTypes);
$result = $stmt->fetchAll();
$stmt = null;

Если selectedTypes содержит ["HighSchool", "MiddleSchool", "TradeSchool"], то $placeholders будет содержать [?, ?, ?]. Это используется для создания шаблона SQL для подготовленного запроса оператора с использованием массива selectedTypes в качестве входных данных.

$result должны иметь данные, которые вы ищете.

GET
. Таким образом, предполагая, что запрос требует HighSchool, это может быть обнаружено, если пользователь отправляет highschool, используя вашу функцию basictext().

Оттуда я бы сделал что-то вроде этого:

[110]

Это заполнило бы массив selectedTypes соответствующими типами того, что отправляет пользователь.

Используя это, вы можете добавить предложение IN к вашему окончательному запросу.

[111]

Если selectedTypes содержит ["HighSchool", "MiddleSchool", "TradeSchool"], то $placeholders будет содержать [?, ?, ?]. Это используется для создания шаблона SQL для подготовленного запроса оператора с использованием массива selectedTypes в качестве входных данных.

$result должны иметь данные, которые вы ищете.

0
ответ дан Magnus Bull 16 January 2019 в 19:30
поделиться
Другие вопросы по тегам:

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