2013-05-10 3 views
0

Извините, если мой английский плохой. У меня есть таблица вроде этого: http://i.imgur.com/yLiKR08.jpgПолучение следующего определенного значения записи SQL в PHP с циклом

То, что я пытаюсь сделать, это иметь функцию, которая автоматически получит значение 6 на основе из 4 значения, которое было встраивать на «$ рода» переменная затем поместить его на «$ переменная bawah», поэтому я код так:

$this->nomer = $sort; 
    $bawah = $this->nomer + 1; 
    $cek = $this->db->query("SELECT * FROM artikel_kategori WHERE sort='$bawah' LIMIT 1"); 
    while ($cek->num_rows() == 0) { 
     $bawah = $this->bawah + 1; 
    } 

Но это, кажется, не работает, помогите мне пожалуйста, я еще любитель программист. FYI Я использую CodeIgniter в качестве основы. И то, что я пытаюсь сделать, - это обмен таблицей с таблицей «$ sort» с значением «$ bawah», так что позиция сортировки четвертой строки может быть заменена пятой строкой. Вот мой запрос для замены записи:

$this->db->query("UPDATE artikel_kategori AS kat1 JOIN artikel_kategori AS kat2 
     ON 
      (kat1.sort='$sort' AND kat2.sort='$bawah') 
     SET 
      kat1.sort=kat2.sort, kat2.sort=kat1.sort"); 
+0

Сколько таблиц вы имеете в виду? Только один? –

+0

Какие критерии позволят вам выбрать пятую строку (значение «6»)? –

+0

Критерии - это следующая запись, имеющая более высокое значение, чем значение $ sort. Например, переменная $ sort имеет значение 4, тогда одно имеет большее значение, чем 4 равно 6, поэтому мне нужно вернуть значение 6 в переменную $ bawah. Вот моя фактическая таблица http://i.imgur.com/yLiKR08.jpg – IkouKuhn

ответ

0

Если я правильно понимаю, что вы пытаетесь к это может сделать:

$this->nomer = $sort; 
$bawah = ''; 
$cek = $this->db->query("SELECT sort FROM artikel_kategori ORDER BY sort ASC"); 
$resArr = $cek->result_array(); 
for ($i = 0; $i < count($resArr) - 1; $i++) { 
/* for ($i = 1; $i < count($resArr); $i++) { // <-- For getting previous entry */ 
    $row = $resArr[$i]; 
    if ($row["sort"] == $sort) { 
     $row2 = $resArr[$i + 1]; 
     /* $row2 = $resArr[$i - 1]; // <-- For getting previous entry */ 
     $bawah = $row2["sort"]; 
     break; 
    } 
} 

if (empty($bawah)) { 
    /* $sort is either the greatest/lowest value 
     or not at all present in the table */ 
} 

EDIT: Исправлен код в соответствии с обращением OP (см. комментарии).

+0

Он работает, но он продолжает возвращать значение выше него, а не значение «6». На самом деле поле сортировки не сортируется, как описано выше, но даже если я добавил «ORDER BY sort» в запросе, результат все тот же. Вот моя фактическая таблица: http://i.imgur.com/yLiKR08.jpg – IkouKuhn

+0

Не могли бы вы привести несколько примеров в виде входных значений для '$ sort' и соответствующих выходных значений для' $ bawah'. Кроме того, вы уверены, что имеете дело с столбцом 'sort', а не' IDKategori' (потому что значения, которые вы указали, являются последними)? – gkalpak

+0

Например, переменная $ sort имеет 4 значения, затем следующее большее значение после 4 равно 6. Поэтому мне нужно получить значение 6 переменной $ bawah. Да, я только хочу иметь дело с столбцом «сортировка», а не с IDKategori, потому что он предназначен только для настройки сортировки без изменения значения другого столбца. Вот мой стол, упорядоченный по своему усмотрению, чтобы было легче читать: http://i.imgur.com/7kbFdbi.jpg – IkouKuhn

0

это, вероятно, будет более эффективным, чтобы сделать 1 запрос, который возвращает вам все 6 номеров SELECT * FROM artikel_kategori

Оттуда использовать цикл, чтобы пройти через все результаты и проверить, если результат правильный 1.

это будет гораздо быстрее использовать PHP цикл по 6 результатов, чем сделать 6 SQL запросов