Привет, у меня есть следующий код;
if( ! empty( $post['search-bar'] ) ) { $search_data = preg_replace("#\s\s#is", '', preg_replace("#[^\w\d\s+]#is", '', $post['search-bar'] ) ); $data_array = explode( " ", $search_data ); $data_array = "'%" . implode( "%' OR '%", $data_array ) . "%'"; $query = " SELECT CONCAT( PROFILE_PROFFESION, FIRST_NAME, LAST_NAME, DISPLAY_NAME) AS 'STRING' FROM `" . ACCOUNT_TABLE . "` WHERE STRING LIKE ( " . $data_array . " ) AND BUSINESS_POST_CODE LIKE '" . substr(P_BUSINESS_POST_CODE, 0, 4) . "%'"; $q = mysql_query( $query, $CON ) or die( "_error_" . mysql_error() ); if( mysql_num_rows( $q ) != 0 ) { die(); } }
Проблема в том, что я хочу использовать temp col 'STRING' в предложении where, но возвращает «unknown coloumn STRING
Может ли кто-нибудь указать мне в правильном направлении, считает Phil
Я распечатал запрос;
SELECT PROFILE_PROFFESION, FIRST_NAME, LAST_NAME, DISPLAY_NAME FROM nnn_accounts WHERE CONCAT( PROFILE_PROFFESION, FIRST_NAME, LAST_NAME, DISPLAY_NAME) LIKE ( '%web%' OR '%design%' ) AND BUSINESS_POST_CODE LIKE 'NG19%'
Wrap STRING в `вместо '
Должно быть: ..AS `STRING`
И тогда везде, где вы ссылаетесь на STRING, должно быть `STRING`
Изменить: Здесь это должно решить это:
SELECT CONCAT( PROFILE_PROFFESION, FIRST_NAME, LAST_NAME, DISPLAY_NAME) AS `STRING` FROM `" . ACCOUNT_TABLE . "` WHERE BUSINESS_POST_CODE LIKE '" . substr(P_BUSINESS_POST_CODE, 0, 4) . "%'" HAVING `STRING` LIKE ( " . $data_array . " ) ;
Да, похоже, вы просто не можете использовать temp col в предложении where, просто укажите его как есть:
WHERE CONCAT( PROFILE_PROFFESION, FIRST_NAME, LAST_NAME, DISPLAY_NAME) LIKE '%$data_array%')
Удалить цитаты вокруг 'STRING'
Синтаксис, который был более подходящим, был
SELECT CONCAT( PROFILE_PROFFESION, FIRST_NAME, LAST_NAME, DISPLAY_NAME) AS `STRING` FROM `tablename` WHERE BUSINESS_POST_CODE LIKE 'NG19%' HAVING `STRING` LIKE '%web%' OR `STRING` LIKE '%design%'