2011-10-28 3 views
2

Я только что осознал свою ошибку! Я дважды использовал таблицу jokecategory ... изучение PHP - это смиряющий опыт ...PHP, повторяющий неоднозначные имена из нескольких таблиц

Благодарим за помощь, пока все хорошо!

Извините, я не вставлял SQL, но ваш совет помог тем не менее. Я изменил SQL-запрос, чтобы использовать «AS», но я думаю, что я что-то перепутал с таблицей «категория». Не могу понять, что, но это не позволяет мне искать по категории сейчас. Есть идеи? Я получаю следующее сообщение об ошибке:

Ошибка: Не уникальный стол/псевдоним: 'jokecategory'

SQL-запрос:

$select = 'SELECT DISTINCT joke.id, joke.joketext, author.id AS author_name, author.name AS author_name, jokecategory.jokeid AS cat_jokeid, jokecategory.categoryid AS joke_catid, category.id AS cat_id, category.name as cat_name'; 
$from = ' FROM joke, author, jokecategory, category'; 
$where = ' WHERE joke.authorid = author.id AND joke.id = jokecategory.jokeid AND jokecategory.categoryid = category.id'; 


$aid = $_POST['aid']; 
if ($aid != '') { // An author is selected 
    $where .= " AND authorid='$aid'"; 
} 

$cid = $_POST['cid']; 
if ($cid != '') { // A category is selected 
    $from .= ', jokecategory'; 
    $where .= " AND joke.id=jokecategory.jokeid AND categoryid='$cid'"; 
} 

$tid = $_POST['tid']; 
if ($tid != '') { // A theme is selected 
    $from .= ', joketheme'; 
    $where .= " AND joke.id=joketheme.jokeid AND themeid='$tid'"; 
} 

$gfid = $_POST['gfid']; 
if ($gfid != '') { // A region is selected 
    $from .= ', jokegeofocus'; 
    $where .= " AND joke.id=jokegeofocus.jokeid AND geofocusid='$gfid'"; 
} 

$searchtext = $_POST['searchtext']; 
if ($searchtext != '') { // Some search text was specified 
    $where .= " AND joketext LIKE '%$searchtext%'"; 
    } 

?> 

ответ

1

Мы не видим ваш SQL запрос, но вы должны поставлять псевдонимы столбцов для неоднозначных столбцов с AS ключевым словом, например:

SELECT 
    t1.name AS t1name, 
    t2.name AS t2name 
FROM 
    t1 
    JOIN t2 ON t1.id = t2.id 

Они будут затем получить доступ в извлечённом ряде их псевдонимы:

while ($joke = mysql_fetch_array($jokes)) { 
    echo "Table 1 name: {$joke['t1name']}\n"; 
    echo "Table 2 name: {$joke['t2name']}\n"; 
} 

Еще одно предложение (хотя опять же, поскольку мы не видим, как SQL может быть спорным), должно быть указано, какие столбцы вы выбираете.

Вместо того, чтобы делать

SELECT t1.*, t2.* 

лучше практика явно перечислить столбцы, нужно:

SELECT t1.name, t2.id, t2.category .... t2.whatever 
0

это может быть достигнуто с небольшими изменениями в SQL в $ шутки

SELECT j.name as jokename, a.name as authorname 
FROM joke j, author a 
WHERE j.author_id = j.id 

Тогда вы могли бы указать столбец имени шутки через $ joke ['jokename'] a столбец имени автора через $ joke ['authorname']

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