Подсчет вхождений во второй таблице по сравнению с первым - PullRequest
0 голосов
/ 19 февраля 2011

У меня есть две таблицы, одна содержит информацию о авторах моего сайта, а другая содержит информацию о внесенных фотографиях.

Для административной стороны сайта я хочу создать таблицу с использованием php и mysql, котораяотображает всех участников, а также подсчитывает количество фотографий, доступных каждому участнику для сайта.

Я получаю список имен, используя этот код

  SELECT *  
    FROM site_con 
ORDER BY surn ASC

Затем я настроил цикл дляперечислите все имена, но добавили запрос в этот цикл, чтобы подсчитать количество фотографий, использующих этот код

$contributor = $row_rsContrib['con_Code'];

mysql_select_db($database_connGrowl, $connGrowl);
$query_rsCounter = "SELECT COUNT(*) AS Count 
                      FROM site_phts 
                     WHERE photter = $contributor";

$rsCounter = mysql_query($query_rsCounter, $connGrowl) or die(mysql_error());
$row_rsCounter = mysql_fetch_assoc($rsCounter);
$totalRows_rsCounter = mysql_num_rows($rsCounter);

Единственная проблема заключается в том, что когда $ contributor нет в таблице фотографий, он возвращает ошибку,

Есть идеи?

Ответы [ 4 ]

1 голос
/ 19 февраля 2011

На самом деле лучший способ сделать это - использовать MSQL для подсчета, а не PHP:

SELECT site_con.*, COUNT( photo_id )
FROM site_con
LEFT JOIN site_phts ON site_con.con_Code = site_phts.photter
GROUP BY site_con.con_Code
ORDER BY site_con.surn

. LEFT JOIN обладает специальным свойством создания пустых записей, когда в правой таблице нет строки(фото), который соответствует строке участника.COUNT не будет считать эти пустые записи.(Вам нужен какой-то уникальный столбец в таблице фотографий, для этого я использовал photo_id.)

1 голос
/ 19 февраля 2011

Вы можете получить список участников и количество фотографий в одном запросе:

   SELECT sc.*,
          COALESCE(x.numPhotos, 0) AS numPht
     FROM SITE_CON sc
LEFT JOIN (SELECT sp.photter,
                  COUNT(*) AS numPhotos
             FROM SITE_PHTS sp
         GROUP BY sp.photter) x ON x.photter = sc.con_code
 ORDER BY ssc.surn

Ваш запрос не выполнен, поскольку у фотографа не обязательно есть вклады. Приведенный выше запрос возвращает список фотографов, а у тех, у кого нет связанных фотографий, будет значение numPht, равное нулю. Вот учебник по JOIN , чтобы объяснить, что используется OUTER JOIN.

0 голосов
/ 19 февраля 2011

Сделайте что-то вроде этого, я считаю, что это должно работать:

$result = mysql_query("SELECT COUNT(*) AS Count FROM site_phts WHERE photter = '$contributor'"); // put the single quote if $contributor is a string value

//use mysql_fetch_array

if ($row = mysql_fetch_array($result, MYSQL_NUM)) {
    printf("ID: %d", $row[0]);  
}

Надеюсь, это работает, Удачи, приятель!

0 голосов
/ 19 февраля 2011

это отношение между авторами и фотографиями:

  • 1 фотография может содержать не более 1 участника
  • 1 Участник может иметь самую бесконечную фотографию

Автор <- (0, n) ------ (0,1) -> Фотография

чтобы вы могли добавить связь между этими двумя таблицами, я имею в виду, вы добавляете con_id в таблицу фотографий (в виде столбца).

таким образом вы сможете получить всю информацию в одном запросе SQL.

(как только что сказал OMG Ponies)

...