показывать конкретный img на основе результатов MYSQL из 2 таблиц. ВЫБЕРИТЕ, PHP

#php #mysql #select #rating

#php #mysql #выберите #Оценка

Вопрос:

Я пытаюсь создать систему оценки пользователей на основе содержимого, хранящегося в 2 таблицах MYSQL.

Одна таблица называется «imagemarkers», а другая «markers».

Я хочу проверить строку «authorid», которая одинакова в обеих таблицах, в которой хранится число, основанное на «authorid» пользователя.

Я хочу показать конкретное изображение на основе количества раз, когда конкретный идентификационный номер пользователя встречается в «authorid» из обеих таблиц «markers» и «imagemarkers».

это объявлено в верхней части страницы:

   $theID = $_GET['id'];
  

Код, который у меня есть до сих пор, является:

    <? $img0 = "<img src='../webimages/0star.png'>"; 
  $img1 = "<img src='../webimages/1star.png'>"; 
  $img2 = "<img src='../webimages/2star.png'>";
  $img3 = "<img src='../webimages/3star.png'>";
  $img4 = "<img src='../webimages/4star.png'>";
  $img5 = "<img src='../webimages/5star.png'>"; ?>

  <? $result3 = mysql_query("SELECT * FROM `markers`, `imagemarkers` WHERE authorid = $theID");
$rows = mysql_num_rows($result3);  ?>

 <?php 
while($row = mysql_fetch_array($result3)){

 if ($result3 > 1) {
     echo "$img1";
 } elseif ($result3 == 5) {
     echo "$img2";
 } elseif ($result3 == 10) {
     echo "$img3";
 } elseif ($result3 == 20) {
     echo "$img4";
 } elseif ($result3 == 30) {
     echo "$img5";
 } else {
     echo "$img0";
 }
 ?>

 <? } ?>
  

Строка моей таблицы mysql «authorid» хранится как INT, 11 и помечена галочкой allow null.

Ошибка, которую я получаю, это:

    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource....
  

Пожалуйста, помогите мне решить это.
Большое вам спасибо за ваше время.

Обновление, это новый код, который у меня есть, и он все еще отображает ‘$ img0’, когда он должен показывать ‘$ img3’:

  <? $img0 = "<img src='../webimages/0star.png'>"; 
$img1 = "<img src='../webimages/1star.png'>"; 
$img2 = "<img src='../webimages/2star.png'>";
$img3 = "<img src='../webimages/3star.png'>";
$img4 = "<img src='../webimages/4star.png'>";
$img5 = "<img src='../webimages/5star.png'>";   ?>

 <? $row[0] = mysql_query("SELECT * FROM `markers`, `imagemarkers` WHERE authorid = '".    (int)$theID."'");

  if ($row[0] > 1) {
      echo "$img1";
  } elseif ($row[0] > 5) {
      echo "$img2";
  } elseif ($row[0] > 10) {
      echo "$img3";
  } elseif ($row[0] > 20) {
      echo "$img4";
  } elseif ($row[0] > 30) {
      echo "$img5";
  } else {
      echo "$img0";
  }
  ?>
  

Я подсчитываю, где отображается конкретный номер пользователя и соответствует ‘theID’ в строке ‘authorid’, из обеих таблиц ‘imagemarkers’ и ‘markers’. Пользователь хранит другие данные в базе данных, и, сохраняя это, заполняет строку ‘authorid’ как в ‘markers’, так и в ‘imagemarkers’ в зависимости от того, какую форму они заполняют для сохранения информации.

Я надеюсь, это поможет вам понять, что я пытаюсь сделать..

Ответ №1:

заключите его в одинарные кавычки $theID , также убедитесь, что $theID отмечен как целое число или поместите (int) перед ним:

 $result3 = mysql_query("SELECT * FROM `markers`, `imagemarkers` WHERE authorid = '".(int)$theID."'");
  

если ошибка все еще возникает, замените на this и посмотрите, какую ошибку вы получите:

 $result3 = mysql_query("SELECT * FROM `markers`, `imagemarkers` WHERE authorid = '".(int)$theID."'") or die(mysql_error());
  

Потому что тогда $result3 нет допустимого ресурса результатов для mysql_num_rows

Комментарии:

1. Отлично! спасибо, первая инструкция select сработала. он отображает изображение, но показывает ‘$ img0’, когда пользователь ‘authorid’ встречается 14 раз в ‘markers’ и ‘imagemarkers’, поэтому должно отображаться ‘$ img5’, так что, должно быть, что-то не так с моим оператором IF…

2. Ваш запрос еще не оптимизирован. Лучше создайте новый вопрос здесь, поскольку первоначальный вопрос решен. Вы должны спросить себя (и сказать нам), почему вы используете 2 таблицы, а не только 1, и какова их взаимосвязь / структура.

Ответ №2:

  <? 
$result3 = mysql_query("SELECT * FROM `markers`, `imagemarkers` WHERE authorid=".(int)$theID.")";
$rows = mysql_num_rows($result3);  
?>
  

Ответ №3:

Прежде всего, если строка ‘authorid’ существует в обеих таблицах, вы должны указать в запросах, на какую из них вы ссылаетесь:

 $theID = intval($_GET['id']); // to avoid SQL-injections
$result3 = mysql_query("SELECT * FROM `markers` m, `imagemarkers` im WHERE m.authorid = $theID AND im.authorid = $theID");
// m and im are just table-aliases for brevity, you can use whatever names you like
  

Во-вторых, замените $result3 на $row [0] везде внутри цикла «while»:

 if ($row[0] > 1) { ...
  

И, наконец, что-то не так с логикой.

Можете ли вы объяснить полную структуру базы данных, какие столбцы там есть, кроме authorid?

Комментарии:

1. в этом случае m.authorid = im.authorid AND m.authorid = '".(int)$theID."' лучше использовать. Это соединяет обе таблицы.

2. Да, это могло бы быть лучше. Проблема в том, что я понятия не имею, что происходит и зачем нужны две таблицы 😉 Нужна дополнительная информация из topic starter. P.S. Зачем, (int) когда есть intval() ?

3. должно быть, пропустил значение intval 😉