Как добавить условие в виртуальный столбец в mysql? - PullRequest
0 голосов
/ 01 августа 2020

Я хочу добавить условие для столбца tbl_restaurant_featured_history.id , но я не могу добавить это условие в предложение where, потому что оно показывает ошибку: Неизвестный столбец 'Feature' в 'where clause', и если я добавлю условие featured is not null в разделе has. Оно возвращает 0 строк .

Ниже приведен запрос перед добавлением условия

SELECT 
  DISTINCT(tbl_restaurant.id) as restaurant_id,  
  tbl_restaurant.name,  
  tbl_restaurant_featured_history.id as featured, 
  tbl_restaurant.min_order_amount,  
  tbl_restaurant.latitude as latitude,  
  tbl_restaurant.logo, 
  tbl_favourite_restaurant.id as is_fav, 
  tbl_restaurant.address as address,  
  IF(tbl_restaurant_timing.start_time <= '19:56:26' && tbl_restaurant.service = 'Available' && tbl_restaurant_timing.end_time >= '19:56:26', 'Open', 'Closed') AS availblity,
  tbl_restaurant.longitude as longitude,  
  (
    SELECT ROUND(AVG(tbl_rate_review.rate)) 
    FROM tbl_rate_review 
    where tbl_rate_review.restaurant_id = tbl_restaurant.id 
    GROUP BY restaurant_id
  ) as avgrating, 
  (
    SELECT ROUND(AVG(tbl_rate_review.rate), 2) 
    FROM tbl_rate_review 
    where tbl_rate_review.restaurant_id = tbl_restaurant.id 
    GROUP BY restaurant_id
  ) as rating,  
  111.045 * DEGREES(ACOS(COS(RADIANS(23.0266941)) * COS(RADIANS(latitude)) * COS(RADIANS(longitude) - RADIANS(72.6008731)) + SIN(RADIANS(23.0266941)) * SIN(RADIANS(latitude)))) AS distance_in_km 
FROM tbl_restaurant 
LEFT JOIN tbl_restaurant_featured_history ON tbl_restaurant_featured_history.restaurant_id = tbl_restaurant.id 
LEFT JOIN tbl_restaurant_menu ON tbl_restaurant_menu.restaurant_id = tbl_restaurant.id AND tbl_restaurant_menu.status='Active' 
LEFT JOIN tbl_favourite_restaurant ON tbl_favourite_restaurant.restaurant_id=tbl_restaurant.id AND tbl_favourite_restaurant.user_id=19 
LEFT JOIN tbl_restaurant_timing ON tbl_restaurant_timing.restaurant_id = tbl_restaurant.id AND tbl_restaurant_timing.day = 'Saturday' 
WHERE tbl_restaurant.status = 'Active'  
HAVING distance_in_km <= 10  
ORDER BY availblity DESC, distance_in_km ASC LIMIT 10, 10

И вывод этого запроса

введите описание изображения здесь

Ответы [ 2 ]

1 голос
/ 01 августа 2020

Запрос плохо сформирован и, следовательно, его довольно трудно понять.

Я вижу это в предложении select:

tbl_restaurant_featured_history.id as featured

Предложение where запроса просто не может ссылаться на псевдоним, определенный в предложении select. Если вы хотите отфильтровать это, вам нужно использовать имя столбца (tbl_restaurant_featured_history.id), а не псевдоним (featured):

where tbl_restaurant_featured_history.id is not null
0 голосов
/ 01 августа 2020

Таблица tbl_restaurant_featured_history LEFT присоединена к таблице tbl_restaurant, и именно поэтому вы получаете нулевые значения в результатах, потому что некоторые строки не соответствуют условиям установленного вами предложения ON. Если вы хотите добавить условие:

tbl_restaurant_featured_history.id is not null

, это означает, что вам нужны только совпадающие строки, и из ваших данных примера я вижу, что есть только 1 соответствующая строка. В этом случае все, что вам нужно сделать, это изменить соединение на соединение INNER:

.................................
FROM tbl_restaurant 
INNER JOIN tbl_restaurant_featured_history ON tbl_restaurant_featured_history.restaurant_id = tbl_restaurant.id
.................................
...