Все привет! С php работаю посредственно, поэтому много еще не умею или не понимаю. У меня есть задача записать в бд данные, данная таблица имеет 2 поля - optionID и categoryID. Оба поля могут повторяться сколько угодно раз, но мне надо запретить повтор строки. Для этого я перед записью в таблицу делаю выборку строк для проверки, код ниже: Код (Text): $sql_3 = mysql_query("SELECT optionID, categoryID FROM table WHERE optionID = '19' AND categoryID = '111'"); while ($sql_data_3 = mysql_fetch_array($sql_3)) { if (isset($sql_data_3)) { echo $sql_data_3["optionID"]; echo "good<br>"; } else { echo "bad<br>"; } } В таблице есть строка optionID = 19 categoryID = 556, т.е. выше написанный код должен вывести "bad", но ничего не выводит, а если в запросе categoryID исправить на 556, то мне покажет "good" . Помогите разобраться в этом вопросе...
Посмотри, что приходит в $sql_data_3. Попробуй сделай так: Код (PHP): $sql_3=mysql_query("SELECT `optionID`,`categoryID` FROM `table` WHERE `optionID`='19' AND `categoryID`='111'"); while($sql_data_3=mysql_fetch_assoc($sql_3)) { var_dump($sql_data_3); } Что вывидит?
Your, спасибо что попогаешь! Я попробовал, если в запросе задать условие поиска, которое существует, то выводит массив со значениями, а если задать несуществующий параметр, то пусто, т.е. ничего не выводит...
это конечно метод, но ЛУЧШЕ (безопаснее, надежнее, быстрее) наложить ограничение на таблицу чтобы повтор строки в принципе не был возможен. надо объявить уникальный индекс по двум полям. тогда "нечаяный" insert просто ничего не добавит. Добавлено спустя 6 минут 18 секунд: по сути вопроса: isset($sql_data_3) означает "переменная $sql_data_3 существует". т.е. в вашем контексте это условие выполняется всегда
artoodetoo, правильно я понимаю, если я сделаю оба поля уникальными, то ситуация будет выглядеть так: Такое будет разрешено: Код (Text): <table> optionID categoryID 10 5 4 8 10 13 4 13 Такое будет запрещено: Код (Text): <table> optionID categoryID 10 5 4 8 10 5 4 8
вы всё верно поняли про уникальность. если цель узнать существует ли запись с определенными полями, то достаточно вот такой конструкции: Код (PHP): $result = mysql_query("SELECT 1 FROM table WHERE optionID = '19' AND categoryID = '111'"); if (mysql_num_rows($result)) echo 'YES'; else echo 'NO'; mysql_num_rows() возвращает количество строк, которые вернет SELECT. т.е. вместо того, чтобы крутить цикл и прочитывать все строки достаточно просто узнать будет ли хоть одна строка, я так понимаю ваши желания ))) если mysql_num_rows() вернет 0, то условие не выполнится (0 неявно приводится к значению FALSE)
про код спасибо большое, работает, а вот про уникальность я все таки не правильно понял. Допустим таблица пустая и я делаю вставку: Код (Text): INSERT INTO table (optionID, categoryID) VALUES ('10', '5'); Вставилось нормально. Но если я сделаю вставку такую: Код (Text): INSERT INTO table (optionID, categoryID) VALUES ('10', '6'); Мне ругается на то, что optionID = '10' уже есть А мне надо сделать уникальную строку из двух полей, а не поля по отдельности, т.к. одному значению categoryID может соответствовать несколько значений optionID.
paqwerty, покажите код создания таблицы. Вам же ясно написали - уникальный индекс по двум полям, а не два уникальных индекса. в CREATE DEFINITIONS надо указать PRIMARY KEY(и тут через запятую перечислить поля/столбцы). P.S. Чтобы не было лишних вопросов - CREATE DEFINITIONS, грубо говоря, место между скобками после конструкции CREATE TABLE table: CREATE TABLE table (!!!ТУТ!!!)
ALTER TABLE sc_goup_product_options ADD UNIQUE(`optionID`,`categoryID`); СПАСИБО, разобрался, просто у меня была уже таблица и я через пхпмайадмин изменил поля на уникальные, а потом удалил таблицу, создал заново и запустил код Код (Text): ALTER TABLE table ADD UNIQUE(`optionID`,`categoryID`); и все заработало как надо. СПАСИБО ВСЕМ еще раз!!