Вложенный оператор выбора в MySQL-мой код не работает

Вот мой запрос

SELECT con_serial,column2,column3
 FROM
 (SELECT con_serial,column2,column3
 FROM big_table 
 WHERE ISNULL(contact1, '')+'#'+ISNULL(contact2, '')+'#'+ISNULL(contact3, '')+'#'+ISNULL(contact4, '')+'#'+ISNULL(contact5, '')
 LIKE '%' + '".$conserial."' + '%') AS a
 WHERE con_serial
IN('".$contact1."','".$contact2."','".$contact3."','".$contact4."','".$contact5."')   

при внутреннем выборе я хочу получить строки, которые имеют это значение $conserial в одном из 5 столбцов (contact1...contact5)

и внешний выбор, чтобы выбрать строки из него, что их столбец con_serial является одной из переменных ($contact1...$contact5)

Кто-нибудь может увидеть, что здесь не так?

2 ответа

Решение

Несмотря на вашу новую формулировку, это остается очень неясным.
Тем не менее я постараюсь дать вам ответ, основываясь на том, что я могу догадаться...

Сначала вот как я переформулирую ваши потребности:

  • у вас есть некоторые значения в переменных PHP: один $conserial и пять $contact# где # 1-5
  • структура таблицы содержит как минимум эти столбцы: con_serial, column2, column3и пять contact# где # 1-5
  • Вы хотите выбрать строки, где оба (вот самая странная часть вашей потребности):
    • по крайней мере, один из contact# столбцы соответствуют PHP $conserial значение
    • con_serial столбец соответствует хотя бы одному из PHP $contact# ценности

Тем не менее, обратите внимание, что вам не нужно иметь два вложенных SELECT: вы хотите, чтобы каждая строка удовлетворяла двум условиям, поэтому они могут быть AND в WHERE пункт.

Исходя из этого, ваш запрос должен быть:

$query = "
  SELECT con_serial, column2, column3
  FROM big_table
  WHERE con_serial IN ('$contact1', '$contact2', '$contact3', '$contact4', '$contact5')
  AND '$con_serial' IN (contact1, contact2, contact3, contact4, contact5)
";

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

SELECT con_serial,,column2,column3
 FROM(SELECT con_serial,column2,column3
 FROM
  big_table
 WHERE '".$conserial."' IN(contact1,contact2,contact3,contact4,contact5)) a  
  WHERE con_serial IN('".$contact1."','".$contact2."','".$contact3."','".$contact4."','".$contact5."'

это было то, что я хотел Tnx в любом случае;)

Другие вопросы по тегам