Выводить только те записи из table_1, ID который присутствуют в table_2

87
04 апреля 2021, 20:50

Делаю вывод из БД.

Хотелось обойтись без второго if, например что-то вроде:

Как это возможно сделать?

UPD

$all_countries = $mysqli->query("SELECT * FROM `onetravel_countries` ORDER BY `id` LIMIT 0, 10");
if ($all_countries) while ($country = $all_countries->fetch_assoc()) {
     $amt = $mysqli->query("SELECT COUNT(*) FROM `estate_base` WHERE `country_id` = '$country[descr]' AND `useit` <> '0'"); $amt = $amt->fetch_row();
     if ( $amt['0'] > 0 ) { ... }
}
Answer 1

Пусть у нас есть table_1 с колонкой id, и table_2 с колонкой country_id. Получим только те записи из table_1, для которых есть соответствующая запись в таблице table_2:

SELECT `table_1`.* FROM `table_1` JOIN `table_2` 
    ON `table_2`.`country_id` = `table_1`.`id`

Если во второй таблице может быть несколько записей для одной из первой, то нужно дополнить запрос так:

SELECT `table_1`.* FROM `table_1` JOIN `table_2` 
    ON `table_2`.`country_id` = `table_1`.`id` 
    GROUP BY `table_1`.`id` 

Так выведутся записи из первой таблицы без дублирования.

Добавление счётчика записей во второй таблице тоже проблем не представляет:

SELECT `table_1`.*, COUNT(*) as `cnt` FROM `table_1` JOIN `table_2` 
    ON `table_2`.`country_id` = `table_1`.`id` 
    GROUP BY `table_1`.`id` 

Раздел в руководстве.

Answer 2
SELECT COALESCE(COUNT(t2.*), 0) cnt, t1.id, t1.field1, t1.field2 /* , ... */
FROM table_1 t1
LEFT JOIN table_2 t2 ON t2.country_id = t1.id
GROUP BY t1.id /* , t1.field1, t1.field2, ... */ 
ORDER BY t1.id LIMIT 0, 10
READ ALSO
Работа с большими массивами. Сортировка [закрыт]

Работа с большими массивами. Сортировка [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах

132
Как сделать церковный календарь?

Как сделать церковный календарь?

Поделитесь, пожалуйста, опытом как сделать церковный календарь? Чтобы на каждый день снизу высвечивалась строка с именами святыхСам календарь...

118