Завка за изкарване на всички снимки, които са с общ таг

vinsbg

Registered
Здравейте,

опитвам се да направя под всяка снимка да се изкарват, какви такове са и добавени и съответно при клик на даден таг да се зареждат всички снимки, които имат този таг.
За целта съм направил три таблици:
image
Код:
image_id
image_name
...

tag
Код:
tag_id
tag_name

tags_image
Код:
tags_id
image_id

Явно имам проблем със заявката, защото не излизат тагове.
Код:
<li>Тагове: </li>';
                $tags = $pdo->prepare("select * from `images` p LEFT JOIN `tags_image` tp ON p.image_id = tp.image_id LEFT JOIN `tag` t ON tp.tag_id = t.tags_id WHERE image_id = ?");
                $tags -> bindParam(1, $row['image_id'], PDO::PARAM_INT);
                $tags -> execute();
                foreach($tags as $tag) {
                    echo '<li><a href="#">'.$tag['tag_name'].'</li>';  
                }
 
Код:
                $tags = $pdo->prepare("select * from `images` p LEFT JOIN `tags_image` tp ON p.image_id = tp.image_id LEFT JOIN [b]`tag`[/b] t ON tp.tag_id = t.tags_id WHERE image_id = ?");
                $tags -> bindParam(1, $row['image_id'], PDO::PARAM_INT);
                $tags -> execute();
                foreach($tags as $tag) {
                    echo '<li><a href="#">'.$tag['tag_name'].'</li>';  
                }

А дали ти изкарва нещо заявката, може ли проблема да е в това, че не селектваш от правилна таблица, понеже си казал, че таблицата се казва tags, а ти селектваш от tag
 
Поправих в първия си въпрос базите и колоните.
Пробвам в phpmyadmin-a директно тази заявка:
Код:
select * from `images` p LEFT JOIN `tags_image` tp ON p.image_id = tp.image_id LEFT JOIN `tag` t ON tp.tags_id = t.tag_id WHERE image_id = 1
и това, което получавам е:
Код:
 #1052 - Column 'image_id' in where clause is ambiguous
 
Направи го на
Код:
WHERE p.image_id = 1
СУБД не може да определи коя колона с име image_id точно искаш да използваш за условие, понеже са повече от една.
 
imagination каза:
Направи го на
Код:
WHERE p.image_id = 1
СУБД не може да определи коя колона с име image_id точно искаш да използваш за условие, понеже са повече от една.
Да, така стана. Благодаря ти :?:

Сега ми изниква обаче друг въпрос...

Сега как може да стане като кликна на тага да ми селектира всички снимки с този таг, защото аз така само показвам таговете под снимката..
Как би следвало да бъде и заявката?
 
vinsbg каза:
imagination каза:
Направи го на
Код:
WHERE p.image_id = 1
СУБД не може да определи коя колона с име image_id точно искаш да използваш за условие, понеже са повече от една.
Да, така стана. Благодаря ти :?:

Сега ми изниква обаче друг въпрос...

Сега как може да стане като кликна на тага да ми селектира всички снимки с този таг, защото аз така само показвам таговете под снимката..
Как би следвало да бъде и заявката?

Здравей,

[sql]SELECT * FROM `images` WHERE `t.tags_id` ='$id'[/sql]

Така ще ти селектира всички картинки, които имат това ID.
 
Здравей,
не е по-различно от предната заявка
[sql]
select * from `images` p
INNER JOIN `tags_image` tp ON p.image_id = tp.image_id
WHERE tp.tags_id = ид–то–на–таг-а
[/sql]

бтв тези алиаси на таблиците, които ги слагаш е удобно да имат връзка с таблицата. Примерно "images p" или "tags_image` tp" нищо не ми говори. или. Аз бих използвал "images i", "tags_image ti" etc.
Поздрави.
 
Нещо не се получава..
на линка имам:
Код:
tagsPreview.php?tag_id='.$tag['tag_id'].'
в tagsPreview.php
Код:
if(isset($_GET['tag_id']) && is_numeric($_GET['tag_id'])){
    $tag_id = $_GET['tag_id']; {                         
                $result = $pdo->prepare("SELECT * FROM `images` WHERE `t.tags_id` = ? ASC LIMIT 20");
                 $result -> bindParam(1, $row['tag_id'], PDO::PARAM_INT);
                 $result -> execute();
                 foreach($result as $row)
                 {
                       // резултати
                 }
И получавам празна страница.
 
В таблица images нямаш поле tags_id. Липсва ти една таблица в заявката.
Поздрави.
 
Ако това го рънеш в phpmyadmin-а

[sql]
select * from `images` p
INNER JOIN `tags_image` tp ON p.image_id = tp.image_id
WHERE tp.tags_id = ид–то–на–таг-а
[/sql]

Ше ти даде ли нещо, никакви грешки ли нямаш. Провери и еррор лога ?[/code]
 
mapka7a каза:
Ако това го рънеш в phpmyadmin-а

[sql]
select * from `images` p
INNER JOIN `tags_image` tp ON p.image_id = tp.image_id
WHERE tp.tags_id = ид–то–на–таг-а
[/sql]

Ше ти даде ли нещо, никакви грешки ли нямаш. Провери и еррор лога ?[/code]
В phpmyadmin-a връща резултат, но на страницата не, защото аз подавам tag_id и тук в WHERE клаузата се получава tp.tags_id = tag_id, което няма как да върне резултат.. и не знам как може да стане..
 
Смени заявката, с тази по-горе, като замениш "ид–то–на–таг-а" с "?"
и там където биндваш параметрите замени $row['tag_id'] с $_GET['tag_id']
в крайна сметка провери какво ти генерира "препаред стейтмант-а".
Код:
$result->debugDumpParams();
 

Back
Горе