2015-08-18 1 views
0


У меня есть две таблицы MYSQL: «продукт» и «url_alias».
Присоединиться к двум столбцам MYSQL в PHP

+------------+--------+ 
|  product  | 
+------------+--------+ 
| product_id | status | 
+------------+--------+ 
|   1 |  1 | 
|   2 |  0 | 
|   3 |  1 | 
+------------+--------+ 

+------------+------------+ 
|  url_alias  | 
+--------------+----------+ 
| query  | keyword | 
+--------------+----------+ 
| product_id=1 | keyword1 | 
| product_id=2 | keyword2 | 
| product_id=3 | keyword3 | 
+--------------+----------+ 

Я пишу PHP-код для извлечения ключевых слов из колонки url_alias стола, но только для product_id, что имеет соответствующий статус = 1 в продукте таблицы. Я полагал, что это будет связано с объединением двух столбцов и одновременным использованием фильтра.

$sql = " 
SELECT p.product_id 
    , ua.keyword 
    FROM `".$this->tables["product"]."` p 
WHERE p.status = 1 
    LEFT 
    JOIN `".$this->tables["url_alias"]."` ua 
    ON ua.query = CONCAT('product_id=',p.product_id) "; 

До сих пор я получаю:

Error: You have an error in your SQL syntax;

Может кто-нибудь помочь мне понять это?

+3

Это плохо пахнет. если 'query' column always =' product_id = {id} ', тогда сделайте его int и удалите часть' product_id = '. Если столбец содержит более разнообразные данные '{string} {id}', то разбить на два столбца 'querystring' и' queryid' – Steve

+0

Удивительно, что это все, что говорится в сообщении об ошибке. Вы должны использовать очень специальную версию mysql. – Strawberry

+1

Дружественный совет: когда вы сталкиваетесь с синтаксическими ошибками SQL, сначала запустите запросы в консоли БД, если у вас есть к нему доступ (Командная строка, phpmyadmin и т. Д.). Когда вы получите желаемый результат, начните преобразовывать его в дружественную php строку. – harris

ответ

3

Просто попробуйте, как

$sql = "SELECT p.product_id,ua.keyword FROM `".$this->tables["product"]."` p "; 
$sql .= "LEFT JOIN `".$this->tables["url_alias"]."` ua ON ua.query=CONCAT('product_id=',p.product_id) "; 
$sql .= " WHERE p.status=1"; 

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

0

Попробуйте это:

$sql = "SELECT p.product_id,ua.keyword FROM ".$this->tables["product"]." as p WHERE p.status=1 "; 
$sql .= "LEFT JOIN ".$this->tables["url_alias"]." as ua ON ua.query = CONCAT('product_id=',p.product_id) "; 

Вы пропустили 'как'.

+2

'как' не является обязательным. –

0

Удалить одинаковую цитату из tablename после From. Попробуйте этот запрос,

$sql = "SELECT p.product_id,ua.keyword FROM ".$this->tables["product"]." p WHERE p.status=1 "; 
    $sql .= "LEFT JOIN ".$this->tables["url_alias"]." ua ON ua.product_id=p.product_id "; 
+1

В таблице 'url_alias' нет столбца' product_id'. (Хотя он должен, см. Комментарий Стива по этому вопросу.) Но так оно и есть, этот запрос не будет работать. –