как правильно поместить запрос mysql в php?

#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.