2015-08-06 3 views
0

Я новичок в SQL и задаюсь вопросом, что не так в моем синтаксисе или логике здесь. У меня есть свой стол clients какГде ошибка в моем полном внешнем соединении?

id | name  | postid | sord | 
-------------------------------------------------------- 
1  Paul Allen 19   1 
2  McDermot  8   2  

и postid столбец в этой таблице имеет в виду то же самое, как id колонки в wp_posts таблице как

id | ... | ... |   guid   | ... 
-------------------------------------------------- 
1 ... ...  images/somepic.jpg  ... 
. 
. 
8 ... ...  images/mypic.gif   ... 
. 
. 
. 
19 ... ...  images/thatpic.png  ... 
. 
. 
. 

То, что я хочу, чтобы вернуть это таблица рядов, как

id | name  | postid | sord | guid 
-------------------------------------------------------- 
1  Paul Allen 19   1   images/mypic.gif 
2  McDermot  8   2   images/thatpic.png 

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

global $wpdb; 
$allCients = $wpdb->get_results(" 
    SELECT clients.id, clients.name, clients.postid, clients.sord, wp_posts.guid 
    FROM clients 
    FULL OUTER JOIN wp_posts 
    ON clients.postid=wp_posts.id 
    ORDER BY clients.sord 
"); 

$numClients = count($allCients); 

, но по какой-то причине, что возвращает 0 результат (т.е. $numClients является 0) вместо ожидаемого 2. Что я делаю неправильно?

+0

, если вы ожидаете, 2 строки должны быть возвращены, попробуйте 'внутренний join' –

ответ

1

MySQL не поддерживает full outer join. Но вы все равно не нуждаетесь в этом, если у вас есть надлежащие отношения с внешним ключом. Например, если вы хотите, чтобы все клиенты, даже те, без сообщений:

SELECT c.id, c.name, c.postid, c.sord, p.guid 
FROM clients c LEFT JOIN 
    wp_posts p 
    ON c.postid = p.id 
ORDER BY c.sord; 
0

Если вы используете MySQL, не FULL OUTER JOIN. Вместо этого вы можете использовать LEFT OUTER JOIN, a UNION и RIGHT OUTER JOIN. Это переполнение стека ответ есть пример:

https://stackoverflow.com/a/10137216/4629105

select * from A as a 
    left outer join B as b on a.col = b.col 
union 
select * from A as a 
    right outer join B as b on a.col = b.col 
0

Вам даже не нужно делать LEFT JOIN в этом случае.

Просто вытащите FULL OUTER, как и другие упомянутые.

Так что ваш код будет:

global $wpdb; 
$allCients = $wpdb->get_results(" 
    SELECT clients.id, clients.name, clients.postid, clients.sord, wp_posts.guid 
    FROM clients 
    JOIN wp_posts 
    ON clients.postid=wp_posts.id 
    ORDER BY clients.sord 
"); 

$numClients = count($allCients); 
Смежные вопросы