2012-05-07 4 views
1

Я пытаюсь присоединиться к 3 табличным тегам, элементам и транзакциям. Сделки - это список платежей. Itemtags связывает транзакцию (от «транзакций») с тегами, которая соответствует правильной информации о тегах в «Теги».Объединение 3 таблиц в SQL/PHP

Я хочу связать все три таблицы, чтобы я мог видеть как поле «тэг» внутри «Метки», так и «Билл-дат» в транзакциях. Мой код не работает - когда я пытаюсь сделать mysql_fetch_array я получаю следующее сообщение об ошибке:

«Предупреждение: mysql_fetch_array() ожидает параметр 1, чтобы быть ресурсом, логический»

Любая помощь с благодарностью получил!

$list = mysql_query("SELECT 
tags.tagid,tags.tagname, 
itemtags.tagid,itemtags.transactionid 
transaction.transactionid,transaction.billdate 
FROM 
tags 
    LEFT JOIN itemtags ON tags.tagid = itemtags.tagid 
    LEFT JOIN transaction ON itemtags.transactionid = transaction.transactionid 
WHERE 
DATE(`transaction.billdate`) >= '$startdate' AND 
DATE(`transaction.billdate`) <= '$enddate' 
"); 

while($val=mysql_fetch_array($list)) { 
print ' '.$val['tagid'].' - '.$val['tagname'].' ||'; 
} 
+4

** предупреждение ** ваш код уязвим для атак с использованием SQL-атак. –

+0

Вы задаете переменную результата $ result = [backtick] mysql_query (...) [backtick] и используете этот результат $ в вашем mysql_fetch_array ($ result)? – Bryan

ответ

2

Ваш запрос определенно есть ошибки в нем, чтобы отладить ошибки были вызваны, используйте приведенный ниже код.

mysql_query($query) or die(mysql_error()); 

Это приведет к распечатке правильной ошибки, что запрос SQL бросает, я с удовольствием помогу вам с запросом, как только вы сказать мне, что точная ошибка :)

Исправленный запрос , или ближе к правильности, должно выглядеть следующим образом. Обратите внимание, что я скорректировал ваши сравнения даты, так как синтаксис DATE() не был необходим :)

SELECT 
    tags.tagid, 
    tags.tagname, 
    itemtags.tagid, 
    itemtags.transactionid, 
    transaction.transactionid, 
    transaction.billdate 
FROM tags 
    LEFT JOIN itemtags ON tags.tagid = itemtags.tagid 
    LEFT JOIN transaction ON itemtags.transactionid = transaction.transactionid 
WHERE 
transaction.billdate >= '$startdate' AND 
transaction.billdate <= '$enddate' 
+0

В нем говорится: у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с .transactionid, transaction.billdate FROM tags LEFT JOIN itemtags ON tags.tag 'в строке 4 – Simeon

+0

Попробуйте новый запрос и дайте мне знать :) – Bryan

+0

Легенда. Спасибо. Это работает. – Simeon

0

Вы имели опечатку в первом слева присоединиться, и вы можете использовать псевдоним, чтобы получить тот же столбец дважды

mysql_query("SELECT 
tags.tagid,tags.tagname, 
itemtags.tagid,itemtags.transactionid as itemtagstransid, 
transaction.transactionid as transtransid,transaction.billdate 
FROM 
tags 
    LEFT JOIN itemtags ON tags.tagid = itemtags.tagid 
    LEFT JOIN transaction ON itemtags.transactionid = transaction.transactionid 
WHERE 
DATE(`transaction.billdate`) >= '$startdate' AND 
DATE(`transaction.billdate`) <= '$enddate' 
");` 
+0

Спасибо. Я думаю, что исправил эти ошибки - как указано выше, но по-прежнему появляется такая же ошибка? Я буду играть с псевдонимом, когда он работает, чтобы разобраться, как их использовать! – Simeon

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