2013-09-10 2 views
0

Я развивать сайт для электронных книг, я имею в таблице базы данных для авторов и таблицы для издателей .. иногда имя автора добавляется также в таблице издателей в качестве издателя Теперь у меня есть свое имя в качестве автора и издатель .. когда я поиск на сайте по его имени, он вернется в два раза, потому что я поиск в таблице авторов и издателей таблице затем объединить два запросаКак добавить условие в mysql-запрос, выполняемый в другой таблице?

это мой код: -

function generate_results($keyword, $row = 0) { 


     $result1 = $this->db->query("SELECT au_id,au_name,au_state,SUBSTR(au_info,1,190) AS au_info,au_img FROM d_author where (au_name LIKE '%$keyword%' or au_info LIKE '%$keyword%') and au_state = '1' limit $row,20"); 


     $result2 = $this->db->query("SELECT pub_id,pub_name,pub_state,SUBSTR(pub_info,1,190) AS pub_info,pub_img FROM d_publishing where (pub_name LIKE '%$keyword%' or pub_info LIKE '%$keyword%') and and pub_state = '1' limit $row,20"); 


     $results = array_merge($result1->result_array(), $result2->result_array()); 

     return $results; 
    } 

сейчас Я хочу изменить второй запрос на что-то вроде этого: выберите все издатели из таблицы издателей, где имя издателя похоже на ключевое слово $, и это ключевое слово $ не существует в таблице авторов. Я имею в виду, если это имя существует в авторах, не выбирайте его в издателях i перевести это значение в Mysql Query

ответ

0

Прежде всего, проверьте sql-инъекции, прежде чем продолжить разработку в своем приложении ebook. Похоже, что ваше ключевое слово не проверено как безопасный параметр. И, чтобы быть уверенным, вы знаете о csrf и xss? Если нет, проверьте и об этом. Это очень важно.

Secondaly, вы должны подумать о том, чтобы работать над дизайном базы данных до , избегая дублирования значений. Ознакомьтесь с «нормализацией базы данных» для получения дополнительной информации. Похоже, вы могли бы сделать другую таблицу до вывести свою «контактную информацию», такую ​​как имя, состояние, идентификатор и т. Д. Это позволило бы вашей учетной записи-автора и таблицы издателя использовать «contact_id», ссылаясь на контакт-информацию- Таблица.

И последнее, но не менее важное: чтобы ответить на ваш вопрос, вы можете решить такие проблемы с помощью «anti join». Используйте левое соединение в таблице авторов во втором запросе и проверьте «IS NULL» на совпадениях с таблицей издателя. Более подробная информация здесь: http://explainextended.com/2009/09/18/not-in-vs-not-exists-vs-left-join-is-null-mysql/

Я не знаю, если я понимаю ваш проект базы данных укомплектовать право, но это также, кажется, как UNION в сочетании с DISTINCT может помочь вам - и вы даже не нужно это array_merge -stuff. Я предлагаю вам проверить эти две команды в документах mysql.

Смежные вопросы