Этот код ниже повторяет 8 имен из tableOne, но я хочу сравнить эти имена с 8 именами в другой таблице. Я хочу сравнить строки, отображаемые в $row['weight'] с tableTwo, и, если результаты не совпадают, добавить <span class="strike"> </span> к результату, отображаемому в $row['weight'].

Как мне добавить if / else, чтобы $row['weight'] сравнить каждое имя с именами в другой таблице?

$result = mysqli_query($con,"SELECT * FROM tableOne LIMIT 0, 8");

$i = 1;

while($row = mysqli_fetch_array($result)) {

  echo $i. " - " . $row['weight'] . '<br>';
  $i++;
}
0
evan 20 Мар 2014 в 23:38

3 ответа

Лучший ответ

Вот простой код для начала:

$result = mysqli_query($con,"SELECT * FROM tableOne LIMIT 0, 8");
$result2 = mysqli_query($con,"SELECT * FROM tableTwo LIMIT 0, 8");

$i = 1;

while($row = mysqli_fetch_array($result)) {
    $value1 = $row['weight'];
    $row2 = mysqli_fetch_array($result2);
    $value2 = $row2['weight'];
    echo $i . " - table 1: ";
    echo $value1;
    echo ", table 2: - ";
    if ($value2 != $value1) {
        echo '<span class="strike">$value2</span>';
    } else {
        echo $value2;
    }
    echo '<br>';
    $i++;
}

Вы можете сделать код умнее, чтобы обрабатывать случаи, когда нет 8 значений для сравнения, а также отображать значения в таблице HTML, но, надеюсь, это поможет вам начать работу.

1
Steven 21 Мар 2014 в 00:50
Спасибо, это должно быть $row2 = mysqli_fetch_array($result2); вместо $results? Кроме того, это работает, но строки должны совпадать между таблицами. Возможно ли, чтобы имена были в любом порядке, но при этом сравнивались?
 – 
evan
21 Мар 2014 в 00:08
Вы правы в вопросе $result2; Я отредактировал код. Что касается порядка, вы можете добавить предложение ORDER BY в SQL. Однако, если значения могут отличаться, вам может потребоваться заказать другой столбец, например идентификатор или дату создания. Не зная схемы таблицы, трудно сказать.
 – 
Steven
21 Мар 2014 в 00:51
Мне не нужно упорядочивать их, мне просто нужно посмотреть, равны ли какие-либо из 8 в tableOne любому из 8 в tableTwo, а затем, если tableTwo не соответствует содержать данные в tableOne, затем зачеркнуть имя (вывод) tableOne. - но прямо сейчас он помещает страйк только в вывод tableOne, если он находится в соответствующей строке в tableTwo. ~ извините, это может показаться запутанным.
 – 
evan
21 Мар 2014 в 06:35
Похоже, вам нужен вложенный цикл. Внешний цикл будет foreach table1 row. Внутри сделайте строку foreach table2 и сравните. Если вы найдете совпадение, напечатайте его, в противном случае сделайте зачеркивание.
 – 
Steven
21 Мар 2014 в 19:17
Да, это звучит правильно, но мне не повезло с моей стороны. Не могли бы вы обновить свой ответ?
 – 
evan
22 Мар 2014 в 00:41

Попробуй это:

    $sql="select * from tableone to left join tabletwo tw on to.weight=tw.weight ";

Этот запрос вернет все строки в tableone, которые соответствуют, и пустые строки для тех, у которых вес не совпадает.

Итак, в вашем PHP-коде:

    while($row = mysqli_fetch_array($result)) {
      if(empty($row['weight'])){
        echo '<span class="strike">$row[weight]</span>';
      }
    }

Это будет работать с любым динамическим количеством записей в таблицах.

1
Steven 21 Мар 2014 в 00:53

Как насчет того, чтобы сохранить значения ($ row []) в одном массиве ($ tableOne) и сделать то же самое для таблицы 2 ($ tableTwo), а затем выполнить сравнение в foreach ()? (Для простоты, если вы не хотите никаких объединений)

0
J A 20 Мар 2014 в 23:49