Поиск похожих картинок(новостей) в БД MySQL по ключевым словам.

Macintosh

Новичок
Попробовал запрос, вернуло тоже самое, но логику запроса до конца еще не понял, я только что читал как раз об этом JOIN, LEFT JOIN, RIGHT JOIN, ON, AS, и про индексы, но еще не до конца переварил )) И я смотрю у вас тут что-то типа псевдонимов i.*, c.name, u.login, такого еще не видел, я только узнал что с помощью AS можно делать псевдонимы, а это что-то другое )). А чем лучше ваш вариант запроса, чем мой? Он быстрее, или просто запись короче?
 

WMix

герр M:)ller
Партнер клуба
join читабильней, но разницу 2х запросов найди плиз сам
 

Macintosh

Новичок
Вот эти ваши сокращения я понял:i.*, c.name, u.login и categories c ON i.category_id = c.id

Вот тут: categories c, вы как бы создаете псевдоним, а вот тут: c.id, используете. Понять понял, но правил создания таких псевдонимов, не знаю, даже не знаю в каком разделе справочника их искать )))) А по поводу LEFT JOIN я не врублюсь, я уже и в книге читаю и пример пробую в живую, не пойму нафига это нужно )) и как пригодится ) Все что я понял, что оно как бы позволяет включить в результат, строки левой таблицы, которым не нашлось соответствий в правой, и заполняет их значением NULL )) Какой-то бред. Не врублюсь я )))))
 

WMix

герр M:)ller
Партнер клуба
которым не нашлось соответствий в правой
тогда впиши несуществующую категорию или NULL и погляди на ответ для этой строчки моим и своим запросом!
 

Macintosh

Новичок
А, ну я так и понял, что так будет, о чем я выше написал, просто в моём случае, зачем мне это? ) У меня стоит защита от этого, нельзя удалить категорию, пока к ней относится хоть одна картинка, также нельзя разместить картинку в несуществующую категорию ) Также нет, смысл выводить информацию о картинке, но при этом не показать в какой она категории находится. Но все равно спасибо, так я до конца осознал что произойдет ). Кстати, а нельзя ли каким-то хитрым образом, объединить запросы SELECT и DELETE?
 

Macintosh

Новичок
Вот результат, для наглядности ) Не знаю, загрузится ли картинка, сейчас попробуем ) По крайней мере в режиме Preview, не разрешает мне ее смотреть (
1.png
 

Вурдалак

Продвинутый новичок
А не проще ли было скопировать из консоли и вставить в [code][/code]?
 
Последнее редактирование:

hell0w0rd

Продвинутый новичок
Самый простой пример применения AS:
PHP:
SELECT users.name AS user, cities.name AS city
FROM users
JOIN cities ON users.city = cities.id
Короче чтобы не было коллизий. Ну и запрос короче можно делать
 

Macintosh

Новичок
По поводу AS, проблем и не было, я выше писал что читал об этом и уже понял. Я не совсем до конца понял как псевдонимы делал WMix, точнее принцип я понял, а вот где правила создания таких псевдонимов почитать? С JOIN мы в принципе тоже разобрались. Я сейчас пытаюсь разобраться с индексами ))

А не проще ли было скопировать из консоли и вставить в
Код:
?
Легче )) Но мне было интересно попробовать загрузить картинку ) Я новенький на форуме, вот и испытываю все его возможности )))) Тем более не так уж долго ее делать 6 кликов, и картинка готова, в буфер обмена конечно меньше, всего 2 клика.
 

Macintosh

Новичок
Подучил MySQL и решил эту задачку в один запрос:

PHP:
SELECT DISTINCT i.id, i.title, i.upload_date FROM images i 
JOIN (SELECT image_id, tag FROM tags WHERE image_id != 19 AND tag IN('желтые', 'цветы', 'красивая', 'зелень')) t 
ON i.id = t.image_id AND i.category_id = 6 
ORDER BY FIELD (t.tag, 'желтые', 'цветы', 'красивая', 'зелень'), i.id DESC LIMIT 3;
Только решил выбирать из этойже категории, а если бы нужно было, сначала из этой категории, а потом из остальных то можно было бы добавить условие if(i.category_id = 6, 1, 2) и все :) Век живи, век учись :) А, ну да, и табличку с тегами сделал отдельную, но не так как предлагал hell0w0rd, а просто отдельную, также с индексами и explain разобрался :) так что еще кучу своих запросов переписал и кучу кода выкинул из PHP :)
 
Последнее редактирование:
  • Like
Реакции: WMix

WMix

герр M:)ller
Партнер клуба
Macintosh
похоже что sql обрел для тебя другой смысл
 
Сверху