Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: вложенный запрос
 
 автор: bool   (04.06.2014 в 12:10)   письмо автору
 
 

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


$sort = $_POST['sort'];

$query = 
"SELECT (SELECT COUNT(title), authors.id_author FROM articles, authors WHERE authors.id_author=articles.author) as `tit`, DISTINCT authors.id_author, authors.last_name,authors.name,authors.patronymic,authors.publications,indexes.h_index
FROM authors,indexes
WHERE authors.id_author=indexes.author order by ".$sort." desc limit 20";
$result = mysql_query($query);

$i=0;

if (isset($_POST['sort'])) {
  echo '<table>';
  echo '<tr>';
    echo '<th>№п/п</th>';
    echo '<th>ФИО</th>';    
    echo '<th>Фамилия</th>';
    echo '<th>Имя</th>';
    echo '<th>Отчество</th>';
    echo '<th>Публикации</th>';
    echo '<th>Индекс Хирша</th>';
  echo '</tr>';

  while ($row = mysql_fetch_assoc($result)){
     echo '<tr>';
    $i++;
    echo '<td align="center">'.$i.'.</td>';
    echo '<td width="70px"><a href=info.php?id='.$row['id_author'].'> '.$row['id_author'].' </a></td>';
    echo '<td width="120px">'.$row['last_name'].'</td>';       
    echo '<td width="100px">'.$row['name'].'</td>';
    echo '<td width:100px>'.$row['patronymic'].'</td>';
    echo '<td align="center">'.$row['tit'].'</td>';
    echo '<td align="center">'.$row['h_index'].'</td>';
     echo '</tr>';
 } 
echo '</table>';
}

  Ответить  
 
 автор: confirm   (06.06.2014 в 00:35)   письмо автору
 
   для: bool   (04.06.2014 в 12:10)
 

Он не только неправильный, но и странный к тому же. DISTINCT - получить только уникальные значения. То есть, получается, что id_author, которое просто обязано быть уникальным, у вас не уникально?

Я вам уже говорил, что подставлять внешние данные в запрос "как есть", это путь к взлому вашей базы, вы упорно продолжаете делать это.

Авторы - это первичная таблица, и каждая запись в ней, это уникальность. Статьи авторов, это вторичная таблица связанная с первичной по id авторов, поэтому:

<?
$query 
'SELECT *, (SELECT COUNT(*) FROM articles WHERE id_author=t1.id_author) tit FROM authors t1
          ORDER BY '
.mysql_real_escape_string($sort).' DESC LIMIT 20';


И логика структуры кода странная - сперва запрос к базе, а после него откуда не возьмись условие, если есть $_POST['sort'] (кстати почему не $sort, если уж используете эту переменную?) выдать таблицу. А почему проверка этого условия не до запроса к базе?

Вывод таблицы, это:
<?
$tbl 
'<table><tr><th>№п/п</th><th>ФИО</th><th>Фамилия</th><th>Имя</th><th>Отчество</th><th>Публикации</th><th>Индекс Хирша</th></tr>'

  while (
$row mysql_fetch_assoc($result)) {
    
$i++;
    
$tbl .= '<tr><td align="center">'.$i.'.</td><td width="70px"><a href=info.php?id='.$row['id_author'].'>'.$row['id_author'].
            
'</a></td><td width="120px">'.$row['last_name'].'</td><td width="100px">'.$row['name'].'</td><td width="100px">'.$row['patronymic'].
            
'</td><td align="center">'.$row['tit'].'</td><td align="center">'.$row['h_index'].'</td></tr>'
 }  
echo 
$tbl .= '</table>';


Пробелы в тексте ссылок, это просто два лишних ничего незначащих байта на каждую строку. И вывод строковых значений, это htmlspecialchars (если не только вы 100% доверяете данным в базе, а поэтому игнорируете). Странно и то, что параметр запроса id_author отображается и в качестве текста ссылки.

  Ответить  
 
 автор: bool   (08.06.2014 в 22:20)   письмо автору
 
   для: confirm   (06.06.2014 в 00:35)
 

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

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования