PDA

View Full Version : Column 'displaygroupid' in field list is ambiguous in showthread.php


bobdell01
06-12-2007, 08:29 PM
If someone could help me, I sure would appreciate it.

I added a column to table post: post.to_user (btw, values are stored correctly)
which is a userid

I added this plugin to hook: showthread_query
$hook_query_fields = ",user.username AS to_username";
$hook_query_joins = "LEFT JOIN " . TABLE_PREFIX . "user AS u ON(u.userid = post.to_user)";

The line:
$hook_query_joins = "LEFT JOIN " . TABLE_PREFIX . "user AS u ON(u.userid = post.to_user)";

Seems to be causing the error: "Column 'displaygroupid' in field list is ambiguous"

I previously ran the following query in phpMyAdmin, and got the correct results:

SELECT user.username AS to_username
FROM post
LEFT JOIN user ON ( user.userid = post.to_user )
WHERE post.postid = 173


What am I doing wrong?

(I'm running 3.6.5)

Eikinskjaldi
06-13-2007, 12:32 AM
I am guessing the query that comes out of your hook looks absolutely nothing like the query you ran in phpmyadmin.

for one thing, if you alias a table, you have to always refer to that table by the alias

,user.username AS to_username";
"LEFT JOIN " . TABLE_PREFIX . "user AS u ON(u.userid = post.to_user)";

By rights this query should complain "unknown column user.username in field list"

I am guessing, however, that user is being called again somewhere else in the query so you have a user table and a user as u table and thereby pulling duplicate rows.

It's just a guess though, what is really needed is the actual query your hook generates.

bobdell01
06-13-2007, 12:00 PM
Database error in vBulletin 3.6.5:
Invalid SQL:


SELECT
post.*, post.username AS postusername, post.ipaddress AS ip, IF(post.visible = 2, 1, 0) AS isdeleted,
user.*, userfield.*, usertextfield.*,
icon.title as icontitle, icon.iconpath,

deletionlog.userid AS del_userid, deletionlog.username AS del_username, deletionlog.reason AS del_reason,
editlog.userid AS edit_userid, editlog.username AS edit_username, editlog.dateline AS edit_dateline,
editlog.reason AS edit_reason,
postparsed.pagetext_html, postparsed.hasimages,
sigparsed.signatureparsed, sigparsed.hasimages AS sighasimages,
sigpic.userid AS sigpic, sigpic.dateline AS sigpicdateline, sigpic.width AS sigpicwidth, sigpic.height AS sigpicheight,
IF(displaygroupid=0, user.usergroupid, displaygroupid) AS displaygroupid, infractiongroupid

,user.username AS to_username
FROM post AS post
LEFT JOIN user AS user ON(user.userid = post.userid)
LEFT JOIN userfield AS userfield ON(userfield.userid = user.userid)
LEFT JOIN usertextfield AS usertextfield ON(usertextfield.userid = user.userid)
LEFT JOIN icon AS icon ON(icon.iconid = post.iconid)

LEFT JOIN deletionlog AS deletionlog ON(post.postid = deletionlog.primaryid AND deletionlog.type = 'post')
LEFT JOIN editlog AS editlog ON(editlog.postid = post.postid)
LEFT JOIN postparsed AS postparsed ON(postparsed.postid = post.postid AND postparsed.styleid = 1 AND postparsed.languageid = 1)
LEFT JOIN sigparsed AS sigparsed ON(sigparsed.userid = user.userid AND sigparsed.styleid = 1 AND sigparsed.languageid = 1)
LEFT JOIN sigpic AS sigpic ON(sigpic.userid = post.userid)
LEFT JOIN user AS u ON(u.userid = post.to_user)
WHERE post.postid IN (0,127,128,131,133,135,136,175,176,177,178,179,180 )
ORDER BY post.dateline;


MySQL Error : Column 'displaygroupid' in field list is ambiguous Error Number : 1052
Date : Tuesday, June 12th 2007 @ 03:41:55 PM
Script : http://www.northern-ny.net/kestrel/vbtest/showthread.php?t=6 (http://www.northern-ny.net/kestrel/vbtest/showthread.php?t=6)
Referrer : http://www.northern-ny.net/kestrel/vbtest/forumdisplay.php?f=2 (http://www.northern-ny.net/kestrel/vbtest/forumdisplay.php?f=2)
IP Address : 74.78.5.54
Username : bobdell
Classname : vb_database

If I change the line:
LEFT JOIN user AS u ON(u.userid = post.to_user)

to
LEFT JOIN user AS user ON(user.userid = post.to_user)

I get the following error:

Database error in vBulletin 3.6.5:
Invalid SQL:

SELECT
post.*, post.username AS postusername, post.ipaddress AS ip, IF(post.visible = 2, 1, 0) AS isdeleted,
user.*, userfield.*, usertextfield.*,
icon.title as icontitle, icon.iconpath,

deletionlog.userid AS del_userid, deletionlog.username AS del_username, deletionlog.reason AS del_reason,
editlog.userid AS edit_userid, editlog.username AS edit_username, editlog.dateline AS edit_dateline,
editlog.reason AS edit_reason,
postparsed.pagetext_html, postparsed.hasimages,
sigparsed.signatureparsed, sigparsed.hasimages AS sighasimages,
sigpic.userid AS sigpic, sigpic.dateline AS sigpicdateline, sigpic.width AS sigpicwidth, sigpic.height AS sigpicheight,
IF(displaygroupid=0, user.usergroupid, displaygroupid) AS displaygroupid, infractiongroupid

,user.username AS to_username
FROM post AS post
LEFT JOIN user AS user ON(user.userid = post.userid)
LEFT JOIN userfield AS userfield ON(userfield.userid = user.userid)
LEFT JOIN usertextfield AS usertextfield ON(usertextfield.userid = user.userid)
LEFT JOIN icon AS icon ON(icon.iconid = post.iconid)

LEFT JOIN deletionlog AS deletionlog ON(post.postid = deletionlog.primaryid AND deletionlog.type = 'post')
LEFT JOIN editlog AS editlog ON(editlog.postid = post.postid)
LEFT JOIN postparsed AS postparsed ON(postparsed.postid = post.postid AND postparsed.styleid = 1 AND postparsed.languageid = 1)
LEFT JOIN sigparsed AS sigparsed ON(sigparsed.userid = user.userid AND sigparsed.styleid = 1 AND sigparsed.languageid = 1)
LEFT JOIN sigpic AS sigpic ON(sigpic.userid = post.userid)
LEFT JOIN user AS user ON(user.userid = post.to_user)
WHERE post.postid IN (0,127,128,131,133,135,136,175,176,177,178,179,180 )
ORDER BY post.dateline;

MySQL Error : Not unique table/alias: 'user'
Error Number : 1066
Date : Wednesday, June 13th 2007 @ 09:11:51 AM
Script : http://www.northern-ny.net/kestrel/vbtest/showthread.php?t=6
Referrer : http://www.northern-ny.net/kestrel/vbtest/forumdisplay.php?f=2
IP Address : 74.78.5.54
Username : bobdell
Classname : vb_database


So I guess my issue is how to include a WHERE/ON that will retrieve user.username AS to_username WHERE user.userid=post.to_user

OK, forget it. I'm going to do this a different way. Probably execute a query in hook showthread_query, or add a new field (very inelegant) to table post.

I've put in a request to add a hook after the WHERE clause to allow subqueries.