2016-09-30 2 views
0

У меня есть система, в которой отображаются сообщения, но у пользователя есть возможность видеть положительные (1) и отрицательные (0) сообщения, но также имеет ссылку, где вы можете видеть все сообщения (1 и 0), и я могу сделать этот запрос?Mysql SELECT WHERE id =? AND url = 1, 0 или все

index.php? ID = 1 & URL = 1

<?php 
function mesage($id, $url) { 
$db = DB::getInstance(); 
$query = $db->query("SELECT * FROM mesage WHERE id = ? AND url = ?", array($id, $url)); 
$results = $query->results(); 
return ($results); 
} 

$url = isset($_GET["url"])?$_GET["url"]:'Select 0 and 1'; 
$id = $_GET['id']; 
$getmesaje = mesage($id, $url); 
?> 

Как я могу изменить слово "Select 0 and 1" в переменной "$url", чтобы показать все?

+1

Вы можете использовать 'IN' как' url IN (?) 'Или' url IN (?,?) '. Вам придется строить его динамически в зависимости от пользователя в наборе. – jeroen

+0

Я настоятельно рекомендую установить значения по умолчанию для '$ id' и' $ url' и проверить условие на основе этого. –

+0

@jeroen не могли бы вы привести мне пример кода, видимо, ответ мог бы быть лучше других. – GePraxa

ответ

1

Вы можете использовать

index.php? ID = 1 & URL = 1 // для положительного

index.php? ID = 1 & URL = 0 // для отрицательных

индекс .php? id = 1 // для всех

<?php 
function mesage($id, $url) { 
    $db = DB::getInstance(); 
    if(empty($url)) { 
     $query = $db->query("SELECT * FROM mesage WHERE id = ?",$id); 
    } else { 
     $query = $db->query("SELECT * FROM mesage WHERE id = ? AND url = ?", array($id, $url)); 
    } 
    $results = $query->results(); 
    return ($results); 
} 

$url = isset($_GET["url"])?$_GET["url"]:''; 
$id = $_GET['id']; 
$getmesaje = mesage($id, $url); 
?> 
+0

Это будет работать в случае OP. мы должны убедиться, что '$ id' и' $ url' имеют допустимые значения и не нарушат наш запрос –

+0

Не работает, значение 0 распознается как то, что $ url не существует и выбрасывает все (отрицательные и положительные) комментарии – GePraxa

1

Подготовить динамический запрос зависит от ввода пользователем. и используйте IN в разделе where.

<?php 
     function mesage($id, $url) { 

     $concatenate=''; 

     if(!empty($url)) 
     { 

      $concatenate.= " AND url IN(?)"; 

      $param = array($id, $url); 
     } 
     else 
     { 
      $param = array($id); 

     } 

     $db = DB::getInstance(); 
     $query = $db->query("SELECT * FROM mesage WHERE id = ? $concatenate ",$param); 
     $results = $query->results(); 
     return ($results); 
     } 

     $url = isset($_GET["url"])?$_GET["url"]:''; 
     $id = $_GET['id']; 

     if(!empty($id)) 
     { 
      $getmesaje = mesage($id, $url); 
     } 
    ?> 

UPDATE 1: Согласно комментарий Ваш правильный, когда $ URL приходит с 0 значениями его считают пустым. поэтому это должно быть if(strlen($url)>0){} вот так.

<?php 
    function mesage($id, $url) { 

    $concatenate=''; 

    if(strlen($id)>0) 
    { 

     $concatenate.= " AND url IN(?)"; 

     $param = array($id, $url); 
    } 
    else 
    { 
     $param = array($id); 

    } 

    $db = DB::getInstance(); 
    $query = $db->query("SELECT * FROM mesage WHERE id = ? $concatenate ",$param); 
    $results = $query->results(); 
    return ($results); 
    } 

    $url = isset($_GET["url"])?$_GET["url"]:''; 
    $id = $_GET['id']; 

    if(strlen($id)>0) 
    { 
     $getmesaje = mesage($id, $url); 
    } 
?> 
+0

Это будет работать, но мы должны убедиться, что '$ id' и' $ url' имеют допустимые значения и не нарушат наш запрос. –

+0

Я просто обновляю свои ответы. Теперь все в порядке .thanks @RaviHirani – JYoThI

+0

Да. Выглядит хорошо :-) –