PHP повторяет неоднозначные имена из нескольких таблиц

#php

#php

Вопрос:

Я только что понял свою ошибку! Я дважды использовал таблицу jokecategory… изучение 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 
 

Ответ №2:

это может быть достигнуто с помощью небольших изменений в sql в $ jokes

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

Затем вы сможете ссылаться на столбец имени шутки через $joke[‘jokename’] и столбец имени автора через $joke [‘authorname’]