Динамические значения внутри запроса MySQL - PullRequest
0 голосов
/ 07 октября 2011

Я пытаюсь получить результат, используя приведенный ниже запрос, idRegion записывается в базу данных как 1,2,3,4 для каждого франчайзи, поэтому я хочу, чтобы все франчайзи отображались с помощью idRegion 2. Я получаю idRegion через $ _Get , этот дисплей только первая цифра перед комой, я думаю, так должно готово всю строку 1,2,3,4? Когда я работаю со статическими значениями, что работает?

$colname_franchisee = "-1";
if (isset($_GET['id'])) {
  $colname_franchisee = $_GET['id'];
}


$query_franchisee = sprintf("SELECT * FROM franchise WHERE stiShowInLinks = 'Y' AND idRegion LIKE '%s%' ORDER BY stiName ASC", $colname_franchisee);

Ответы [ 2 ]

1 голос
/ 07 октября 2011

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

$query_franchisee = sprintf("
    SELECT *
    FROM franchise
    WHERE
    stiShowInLinks = 'Y' AND (
        idRegion = '%d' OR
        idRegion LIKE '%d,%%' OR
        idRegion LIKE '%%,%d' OR
        idRegion LIKE '%%,%d,%%'
    )
    ORDER BY stiName ASC
",
$colname_franchisee,
$colname_franchisee,
$colname_franchisee,
$colname_franchisee
);

Функция sprintf обрабатывает символ % как спецификатор формата и обрабатывает следующие несколько символов особым образом.Чтобы буквально использовать символ %, вы должны использовать %%.Итак, после sprintf ваш запрос становится:

idRegion = '1234' OR
idRegion LIKE '1234,%' OR
idRegion LIKE '%,1234' OR
idRegion LIKE '%,1234,%'
0 голосов
/ 07 октября 2011
$colname_franchisee = "-1";
if (isset($_GET['id'])) {
  $cf = intval($_GET['id']);  only if id integer.

}
$query_franchisee = "SELECT * FROM franchise 
                     WHERE stiShowInLinks = 'Y' 
                       AND idRegion LIKE '%cf%' 
                     ORDER BY stiName ASC", $cf); 
...