2017-05-10 1 views
1

Hallo Ich schreibe die folgende AbfrageKombination mehrerer AND, NOT IN-Bedingung ist nicht richtig in php mysql query arbeiten

SELECT * 
FROM `product` 
WHERE (`color` IN ('black')) 
    OR (`pattern` IN ('pattern-1', 'pattern-2', 'pattern-3')) 
    AND `p_category` LIKE '%Blind%' 
    AND id NOT IN('20', '19', '18', '17', '11') 
ORDER BY id DESC 

aber aus irgendeinem Grund zeigt es das Produkt mit der ID '20', '19', '18', '17', '11'

i nachdenken Informationen reichen aus, um dies zu lösen.

aktualisieren

Hier kann ich nicht herausfinden, wo ich ändern müssen. Hier verwende ich Ajax. Die ganze Operation findet auf dieser Seite statt. Post-Variable immer Seite aufgerufen Ajax die Operation i ausgeführt ist

$keyword_array= ([keyword] => Array ( 
        [0] => color*black 
        [1] => pattern*pattern-1 
        [2] => pattern*pattern-2 
        [3] => pattern*pattern-3) 
     [y_id] => Array ( 
        [0] => 20 
        [1] => 19 
        [2] => 18 
        [3] => 17 
        [4] => 11) 
     [category] => Romex Blind); 


     foreach ($keyword_array as $value) { 
      list($before, $after) = explode('*', $value); 
      $elements[$before][] = $after; 
     } 

     $parts = []; 

     foreach ($elements as $column => $values) { 
      $parts[] = "(`$column` IN ('" . implode("', '", $values) . "'))"; 
     } 

     $appear=implode("', '", $_POST['y_id']); 

     $query = "SELECT * FROM `product` WHERE " . implode(' OR ', $parts). " AND `p_category` LIKE '%".$_POST['category']."%' AND id NOT IN('{$appear}') ORDER BY id DESC"; 

Bitte sagen, was ist der Fehler in dieser Abfrage.

+0

Abfrage erhalten wird als codierte Arbeits - Oder Zustand ist mächtiger als nicht - was insgesamt war Ihre Absicht? –

Antwort

4

machen breakets um den oder expresseion:

SELECT * 
FROM `product` 
WHERE (`color` IN ('black') 
    OR `pattern` IN ('pattern-1', 'pattern-2', 'pattern-3')) 
    AND `p_category` LIKE '%Blind%' 
    AND id NOT IN('20', '19', '18', '17', '11') 
ORDER BY id DESC 

UPDATE versuchen

$query = "SELECT * FROM `product` WHERE (" . implode(' OR ', $parts). ") AND `p_category`` 
+0

Vielen Dank Freund. Es funktioniert gut. Deine Antwort ist perfekt. Wirklich danke dir für deine Mühe. –

+0

@abilasher Sie sind willkommen – Jens

-1

Sie Abfrage schreiben kann wie diese

SELECT * FROM product WHERE (color = 'black' OR pattern IN ('pattern-1', 'pattern-2', 'pattern-3')) AND p_category LIKE '%Blind%' AND id NOT IN (20, 19, 18, 17, 11) ORDER BY id 

Sie nur verwenden können oder wenn es sind zwei oder mehr Bedingungen und nur brauchen eine Antwort wie

in Ihnen Fall, dass Sie abfragen scheint falsche Daten

+1

Sie ändern die komplette Logik – Jens

+0

Ich bearbeite es sorry –