#php #mysql #sql
#php #mysql #sql
Вопрос:
У меня есть запрос mysql:
SET @row = 0;
SELECT @row := @row 1 AS Row, col1
FROM table1;
но как правильно поместить внутри $sql=",,,,,,";
?
Я трайду:
SET @row = 0;
$sql = "SELECT @row := @row 1 AS Row, col1
FROM table1";
Но я думаю, что это не сработает, тогда попробуйте:
$sql = "SELECT @row := @row 1 AS Row, col1
FROM table1,
(SELECT @rownum = 0)";
ошибки нет, но я получаю результат для строки null
Это реальный запрос:
SELECT @rownum:=@rownum 1 AS No, B.Serial_number,A.Symptom
FROM oqc_defect A
JOIN (SELECT @rownum := 0) r
LEFT JOIN inspection_report B
ON A.Model = B.Model
WHERE Appearance = 'NG' OR Packing = 'NG' OR Accesories = 'NG' OR Tuner = 'NG' OR General_operation = 'NG'
GROUP BY A.Model
Я получаю результат, подобный:
No Serial_number Symptom
1 106X0336 Remocon Wrong Part Number
6 106X0528 Trimplate have scratch
7 106V8024 IC breaket not lock to top chassis
8 106X5890 IC breaket not lock to top chassis
9 106X5866 IC breaket not lock to top chassis
10 106X0781 Finder crack at bottom side
Комментарии:
1. НЕ вычисляйте rownum в DB! Это работа приложения.
Ответ №1:
Используйте:
$sql = "SELECT @rownum := @rownum 1 AS Row,
t.col1
FROM table1 t
JOIN (SELECT @rownum := 0) r ";
Что я исправил:
- Вам нужно
:=
установить переменную - Объявленная вами переменная является
@rownum
, а не@row
той, которую вы использовали для добавления к самой себе
PHP mysql_query
не поддерживает более одного запроса, поэтому версия, использующая SET, не будет работать так, как вы опубликовали. Решение, которое я предоставил, не требует SET
инструкции, поэтому его можно запустить в mysql_query
…
Комментарии:
1. @nunu: Является ли таблица MyISAM? Я столкнулся с проблемами с этим запросом к таблицам MyISAM.
2. @nunu: Обновление не предоставляет никакой новой информации, но я еще раз заявляю, что использование переменной для вычисления номера строки в таблице MyISAM ненадежно.
3. @OMG: Может быть, лучший способ — использовать php, не так ли?
4. @nunu: Движок MySQL MyISAM не поддерживает этот взлом для этой функциональности ANSI, которую MySQL никогда не предоставлял. Держу пари, они этого не сделают из-за последствий для движка MyISAM.