Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Подсобите с запросом.
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Подсобите с запросом.

Страниц (1): [1]
 

1. Paltash - 06 Мая, 2009 - 13:11:52 - перейти к сообщению
Преамбула:
Есть табличка, которая содержит id и ещё кучу полей.
При изменении существующей записи запрос нормально возвращает массив, который потом вываливается в html-форму для правки.

Амбула:
Проблема(даже может не проблема, а так) состоит в том, чтобы получить такой-же массив, с теми-же полями, но пустыми, для новой записи, но до её создания в базе.
То есть я имею в виду что-то типа такой конструкции, как на примере
в FoxPro это можно сделать так:
CODE (text):
скопировать код в буфер обмена
  1.  "Select Blank Id, field1, field2, field3 from my_table"

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

Есть ли какая-ньть возможность сделать это в MySql? Или придётся в этом случае ручками создавать этот массив?
CODE (text):
скопировать код в буфер обмена
  1.  $aflds = array("Id"=>0,"field1"=>"","field2"=>0,"field3"=>"");

или
CODE (text):
скопировать код в буфер обмена
  1.  $aflds["Id"]=0;
  2. $aflds["field1"]="";
  3. $aflds["field2"]=0;
  4. $aflds["field3"]="";
  5.  

Не хотелось-бы ТАК рещать проблему...
ЗЫ Сорри, если повторяюсь, но поиском что-то не нашел...
2. EuGen - 06 Мая, 2009 - 13:22:48 - перейти к сообщению
Вам поможет:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. SELECT a.* FROM `my_table` AS a RIGHT JOIN `my_table` AS b ON a.id=-1;
  3.  

Вместо -1 впишите значение id, которого точно нет. В моем примере это было так:
PHP:
скопировать код в буфер обмена
  1.  
  2. mysql> select a.* from sms_congrats as a right join sms_congrats as b on a.record_id=-1;
  3. +-----------+---------+--------------+------------+------------+
  4. | record_id | message | message_date | last_state | state_date |
  5. +-----------+---------+--------------+------------+------------+
  6. |      NULL | NULL    | NULL         |       NULL | NULL       |
  7. +-----------+---------+--------------+------------+------------+
  8. 1 row in set (0.00 sec)
  9.  
  10.  

Кроме того, есть команда:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. SHOW FIELDS FROM `my_table`
  3.  

но первый вариант вернет в точности то, что Вам нужно.
3. Paltash - 06 Мая, 2009 - 14:07:32 - перейти к сообщению
[quote=EuGen]Вам поможет:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. SELECT a.* FROM `my_table` AS a RIGHT JOIN `my_table` AS b ON a.id=-1;
  3.  


Спасибо, помогло.
Только пришлось ещё добавить
CODE (text):
скопировать код в буфер обмена
  1. limit 0,1
а то выдавала все записи из таблицы a
4. EuGen - 06 Мая, 2009 - 14:08:37 - перейти к сообщению
А, ну да, конечно. Я то для теста сделал табличку, в которой только 1 запись. Так что существенное уточнение, конечно.
5. Paltash - 06 Мая, 2009 - 14:09:35 - перейти к сообщению
Но всё-равно спасиб! Радость

 

Powered by ExBB FM 1.0 RC1