2014-01-25 2 views
0

Я понял, как отобразить список повторяющихся значений в конкретной таблице базы данных ...Именование ряд подзапросов (PHP/MySQL)

$stm = $pdo->prepare("SELECT URL, COUNT(*) tot 
FROM people 
GROUP BY URL 
HAVING tot > 1"); 
$stm->execute(array(
    'Total'=>$Total 
)); 

while ($row = $stm->fetch()) 
{ 
$URL_Dupe = $row['URL']; 
$tot = $row['tot']; 
$Dupe2[] = ''.$URL_Dupe.''.$tot.''; 
} 

Я хотел бы сделать то же самое с серии таблиц, связанных вместе с UNION ALL п ...

$stm = $pdo->prepare("SELECT 'GZ' AS GSiteID, NULL as Site, 'Life' AS GSection, GZL.Taxon AS URL 
FROM gz_life GZL WHERE GZL.Taxon = :MyURL 
UNION ALL 
SELECT 'All' AS GSiteID, NULL as Site, 'World' AS GSection, GG.Name AS URL FROM gw_geog GG WHERE GG.Name = :MyURL 
UNION ALL 
SELECT 'PX' AS GSiteID, Site, 'People' AS GSection, Ppl.URL FROM people Ppl WHERE Ppl.URL = :MyURL"); 
$stm->execute(array(
'MyURL'=>$MyURL 
)); 

другими словами, я хочу, чтобы отследить любое слово, которое появляется более одного раза в одной таблице или один раз (или больше) в двух или более разные таблицы.

Но я думаю, что я должен сначала создать одно имя для всех этих таблиц (например, «Todo»), а затем выполнить операцию над этим именем, верно? Как мне это сделать? У меня есть аналогичная таблица, которая просто заканчивается «AS X». Но я не могу сделать это по этому запросу, не получая ошибок.

ответ

2

Вы можете сделать union all запрос подзапрос, а затем объединить их, как:

select url, count(*) 
from ((SELECT 'GZ' AS GSiteID, NULL as Site, 'Life' AS GSection, GZL.Taxon AS URL 
     FROM gz_life GZL WHERE GZL.Taxon = :MyURL 
    ) UNION ALL 
     (SELECT 'All' AS GSiteID, NULL as Site, 'World' AS GSection, GG.Name AS URL 
     FROM gw_geog GG WHERE GG.Name = :MyURL 
    ) UNION ALL 
     (SELECT 'PX' AS GSiteID, Site, 'People' AS GSection, Ppl.URL 
     FROM people Ppl WHERE Ppl.URL = :MyURL 
    ) 
    ) t 
group by url; 

Если вы действительно хотите, чтобы выполнить условие: «Я хочу, чтобы отследить любое слово, которое появляется более одного раза в одной таблице или один раз (или более) в двух или более разных таблицах ». Это равносильно тому, что граф, по меньшей мере 2, поэтому добавьте having пункт:

select url, count(*) 
from ((SELECT 'GZ' AS GSiteID, NULL as Site, 'Life' AS GSection, GZL.Taxon AS URL 
     FROM gz_life GZL WHERE GZL.Taxon = :MyURL 
    ) UNION ALL 
     (SELECT 'All' AS GSiteID, NULL as Site, 'World' AS GSection, GG.Name AS URL 
     FROM gw_geog GG WHERE GG.Name = :MyURL 
    ) UNION ALL 
     (SELECT 'PX' AS GSiteID, Site, 'People' AS GSection, Ppl.URL 
     FROM people Ppl WHERE Ppl.URL = :MyURL 
    ) 
    ) t 
group by url 
having count(*) > 1; 
+0

Спасибо, но я должен делать что-то не так с моим временем цикла, как я получаю сообщение об ошибке «Не определено индекс: URL.» (Примечание: я изменил группу по URL-адресу для группировки по URL-адресу.) Это мой цикл while: while ($ row = $ stm-> fetch()) { $ URL = $ row ['URL']; } echo join ($ URL, '
'); –

+0

Это звучит как ошибка php. Я не знаю, почему это произойдет. –

+0

ОК, я буду отмечать это как правильный ответ, а затем исправить свой PHP. –

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