Проблема с оператором SQL в MySQL - PullRequest
4 голосов
/ 10 июня 2011

Я выполняю инструкцию SQL:

$sql = "SELECT pic, userid 
        FROM user_details 
          INNER JOIN wp_users ON user_details.userid  
        WHERE wp_users.id = user_details.userid 
        LIMIT $recordstart, $pagesize
       ";

Запрос предназначен для выбора записей из user_details и wp_users, но должен выбираться только при наличии совпадения (wp_users.id = user_details.userid).

Цель состоит в том, чтобы он в основном выбирал из таблицы при извлечении записи (на основе совпадения идентификатора) из другой таблицы

Проблема заключается в том, что он показывает дубликаты записей.Как я могу решить эту проблему?

Ответы [ 6 ]

3 голосов
/ 10 июня 2011

Вы должны поставить условие JOIN после ON.Например:

$sql="select pic, userid 
      from user_details 
      inner join wp_users on (wp_users.id=user_details.userid)
      limit $recordstart, $pagesize";

Но реальная проблема в том, что у вас есть более 1 записи в user_details для каждой соответствующей записи в wp_users (или наоборот).INNER JOIN заставляет базу данных создавать записи декартовых произведений из user_details и wp_users.Затем таблица результатов фильтруется по текущему состоянию WHERE (wp_users.id = user_details.userid).В зависимости от ваших потребностей вы можете использовать GROUP BY или DISTINCT, если вы хотите получать только уникальные записи.Например, если вам нужно, чтобы userid был уникальным:

$sql="select pic, userid 
      from user_details 
      inner join wp_users on (wp_users.id=user_details.userid)
      group by userid
      limit $recordstart, $pagesize";
2 голосов
/ 10 июня 2011
SELECT DISTINCT pic, userid 
FROM user_details 
  INNER JOIN wp_users ON wp_users.id=user_details.userid 
LIMIT $recordstart, $pagesize
1 голос
/ 10 июня 2011

Используйте DISTINCT, чтобы вернуть только уникальные строки и выполнить условие соединения в разделе ON:

$sql="select distinct pic, userid
      from user_details
      inner join wp_users on wp_users.id=user_details.userid
      limit $recordstart, $pagesize"; 
0 голосов
/ 11 июня 2011

Я мог бы попробовать

 $sql = "select pic, userid 
 from user_details 
 inner join wp_users on user_details.userid = wp_users.id
 limit $recordstart, $pagesize";
0 голосов
/ 10 июня 2011

Вы случайно пропустили часть ON.

$sql="select pic, userid 
      from user_details 
        inner join wp_users on user_details.userid
        = wp_users.id  
      where wp_users.id=user_details.userid   
  limit $recordstart, $pagesize";
0 голосов
/ 10 июня 2011

используйте GROUP BY, потому что он показывает дубликаты записей, если во второй таблице есть несколько записей на одну запись в первой таблице

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...