2016-01-08 2 views
2

У меня есть две таблицы db - одна включает все записи, другая - «черный список» - означает, что я хочу выбрать все значения, за исключением записей таблицы 2PDO Выберите из таблицы WHERE url! = (SELECT)

$req = "SELECT * FROM table1 WHERE link_id != (SELECT id FROM table2)"; 
$stmt = $pdo->query($req); 

foreach($stmt as $data) { 

echo $data['link_id']."<br>";   

} 

Может ли кто-нибудь помочь мне?

+0

Пожалуйста, укажите схему таблицы, такую ​​как идентификатор типа. – Shawn

ответ

3

Вы можете попробовать NOT IN, например, так:

$req = "SELECT * FROM table1 WHERE link_id NOT IN (SELECT id FROM table2)";

Я думаю, что будет делать то, что вы просите, если я правильно понимаю. Однако это может быть не самый быстрый способ сделать это.

3

Несмотря на то, что выбранный ответ работает, он неэффективен, так как БД необходимо выполнить два запроса для внутреннего запроса, а затем снова по внешнему запросу. Наиболее эффективным и эффективным запросом является LEFT JOIN, который устраняет необходимость во втором запросе.

SELECT b.* FROM names AS n LEFT JOIN blacklist_names AS b on n.id=b.id WHERE b.id IS NULL; 

Вы можете использовать такие таблицы, как я, или нет. Я сделал это, чтобы сделать код короче.

Что делает запрос, это сопоставление всех идентификаторов, найденных в обеих таблицах, а затем исключение их из результатов, взятие чего осталось от «списка всех имен», которого нет в «черном списке».

EDIT: В соответствии с автором, помещая решение здесь, чтобы выделить его из комментариев.

SELECT spotify.ID,spotify.land,spotify.song,spotify.link_id,spotify.pos1 FROM spotify LEFT JOIN spotify_blacklist ON (spotify.link_id = spotify_blacklist.URL) WHERE spotify_blacklist.URL IS NULL ORDER BY spotify.song ASC 
+0

Можете ли вы помочь мне на этом примере? Я не сделаю это. 'SELECT * FROM spotify WHERE pos1> '0' AND pos1 <= '100' AND (земля = 'GLOBAL' ИЛИ ​​земля = 'DE') И link_id NOT IN (SELECT URL FROM spotify_blacklist) ORDER BY song ASC ' – LJSven

+0

@SvenJanning Можете ли вы дать мне схему таблиц? Какой идентификатор разделяет эти таблицы? – Shawn

+0

Я думаю, что я уже решил это. У меня была двойная запись, и именно по этой причине я не работал. – LJSven

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