array & MySQL
12 отговора
276 прегледа
array & MySQL
Имам едно select меню с включено multiple. Избирам няколко опции и ги вкарвам в една колона от таблица в MySQL. След това знам как да ги извикам и да ги видя, но проблема е друг. Не мога да претърсвам тази клетка. Искам например да се появят всички юзъри които са избрали опция 1. Когато направя нещо като това:
select * from table1 where choice = '1'
не получавам смислен резултат, ако въобще се получи нещо.
Някой ще помогне ли?
select * from table1 where choice = '1'
не получавам смислен резултат, ако въобще се получи нещо.
Някой ще помогне ли?
Re: array & MySQL
хм, не съм много сигурен, че те разбрах. Тези няколко опции ги вкарваш в една колона ли? Това означава ли, че имаш поле тип "сет"? Понеже сет е неудобно нещо, аз съм решил по друг начин въпроса, когато ми се налага да работя с множество стойности. Всъщност има два варианта:
единият е да ги вкарваш стойностите като стринг и после да търсиш дали се съдържа каквото ти трябва в тоя стринг. Това мисля че ще свърши работа, но е малко неефективно.
Има и друг вариант, който е малко по-сложен, пък и върши работа, ако стойностите не са повече от 5-6, но за сметка на това е много ефективен. Правиш си няколко стойности, всяка от които да съответства на конкретен избор от менюто. Трябва да ги направиш такива интове, че в двоичното им представяне да не съвпадат единици. като получиш резултата, обединяваш ги с побитово или. Така ще получиш уникален резултат за всяка възможна комбинация /*бтв, така работят много от АПИ функциите на виндовс*/ и можеш да търсиш в сложен суич кейз или вложени иф-ове.
. Знам, че изисква доста труд, но ако не можеш да избегнеш сета, това наистина е адски ефективно.
Успех, стига да съм те разбрал правилно.
единият е да ги вкарваш стойностите като стринг и после да търсиш дали се съдържа каквото ти трябва в тоя стринг. Това мисля че ще свърши работа, но е малко неефективно.
Има и друг вариант, който е малко по-сложен, пък и върши работа, ако стойностите не са повече от 5-6, но за сметка на това е много ефективен. Правиш си няколко стойности, всяка от които да съответства на конкретен избор от менюто. Трябва да ги направиш такива интове, че в двоичното им представяне да не съвпадат единици. като получиш резултата, обединяваш ги с побитово или. Така ще получиш уникален резултат за всяка възможна комбинация /*бтв, така работят много от АПИ функциите на виндовс*/ и можеш да търсиш в сложен суич кейз или вложени иф-ове.
Успех, стига да съм те разбрал правилно.
Re: array & MySQL
за кви иф-ове говоря, ти искаш да си ги видиш в заявка, още по лесно:
select * from table_name where stoinost=5 or stoinost = 47... i t. n.
където съм дал някакви примерни числени стойности, представящи обединенията от възможни избори, съдържащи примерно, оция 1
I want to walk into the lights
select * from table_name where stoinost=5 or stoinost = 47... i t. n.
където съм дал някакви примерни числени стойности, представящи обединенията от възможни избори, съдържащи примерно, оция 1
I want to walk into the lights
Re: array & MySQL
predpolagam che imash neshto kato
userid | choice
------------------
1 | 1
1 | 5
2 | 3
2 | 4
3 | 2
3 | 4
4 | 1
4 | 2
pri select userid from table where choice='1' shte ti se izvedat samo tezi useri koito imat choice 1, to est 1vi i 4ti.
stiga da imash sushtata structura de.
puffff
userid | choice
------------------
1 | 1
1 | 5
2 | 3
2 | 4
3 | 2
3 | 4
4 | 1
4 | 2
pri select userid from table where choice='1' shte ti se izvedat samo tezi useri koito imat choice 1, to est 1vi i 4ti.
stiga da imash sushtata structura de.
puffff
Re: array & MySQL
реших си проблема като преобразувах масивите в низове чрез implode
По този начин вместо в клетката да вкарвам масив, аз вкарвам низ от стойности, нещо като 1, 34, 23, 181
и после когато искам да търся, изполвам:
select * from table 1 where choise = '%,23,%' or choise = '23,%' or choise = '%,23';
и така разбирам кой юзър е избрал опция 23
По този начин вместо в клетката да вкарвам масив, аз вкарвам низ от стойности, нещо като 1, 34, 23, 181
и после когато искам да търся, изполвам:
select * from table 1 where choise = '%,23,%' or choise = '23,%' or choise = '%,23';
и така разбирам кой юзър е избрал опция 23
Re: array & MySQL
достатъчно е просто да напишеш
where choise='%23%' :)
% замества произволен брой символи, включително и нула. Така че в тоя случай or е излишно
да цепиш дърва
да носиш вода
where choise='%23%' :)
% замества произволен брой символи, включително и нула. Така че в тоя случай or е излишно
да цепиш дърва
да носиш вода
Re: array & MySQL
да, така е, но в този случай като резултат ще получиш не само 23 но и 123 и 230. Ето защо аз в implode съм дефинирал запетайката като разделител и я използвам в търсенето:
'%, 23,%' - това е 23, но вътре някъде в низа (45, 23, 47, 432)
'23,%' - това е 23, но като първа стойност в низа (23, 15, 654, 2)
'%, 23' - това пък е 23, но като последна стойност в низа (34, 165, 23)
'%, 23,%' - това е 23, но вътре някъде в низа (45, 23, 47, 432)
'23,%' - това е 23, но като първа стойност в низа (23, 15, 654, 2)
'%, 23' - това пък е 23, но като последна стойност в низа (34, 165, 23)
Re: array & MySQL
prav si :) ne bqh se setil, 4e moje da ima6 i drugi takiva stoinosti :)
Re: array & MySQL
В mySQL има прост regexp който може да свърши работа,
вместо %,23,% и %23, и ,23%
но не е там работата.
Смята се за неправилно да имаш няколко стойности в една колона - базата не е приведена във първа нормална форма (или май беше втора :).
Нещо повече не ти препоръчвам да слагаш в базата нещо различно от една стойност, независимо че може да качиш масив, обект, картинка и т.н
Послушай xc
Вместо една таблица
user
id choice
1 2,3
2 1,4
3 2,4,5
махни втората колона и си направи и втора таблица
вместо %,23,% и %23, и ,23%
но не е там работата.
Смята се за неправилно да имаш няколко стойности в една колона - базата не е приведена във първа нормална форма (или май беше втора :).
Нещо повече не ти препоръчвам да слагаш в базата нещо различно от една стойност, независимо че може да качиш масив, обект, картинка и т.н
Послушай xc
Вместо една таблица
user
id choice
1 2,3
2 1,4
3 2,4,5
махни втората колона и си направи и втора таблица
choices
userid choice
1 2
1 3
2 1
2 4
3 2
3 4
3 5
Разбираш нали?
Поздрави!
_________________________________________
Мили деца, xxx.com не е сайта на "трите хикса".
Re: array & MySQL
От гледна точка на оптимизацията си прав. Обаче от гледна точка на броя заявки които трябва да отправя към базата-данни? Ако искам да получа цялата информация за потребителите избрали опция 23 в твоя случай ще имам
1. заявка към таблица choises
2. със всяка от стойностите на UserID ще трябва да направя по още една заявка за да получа конкретната информация за потребителя.
или ако 150 души са избрали опция 23 аз ще трябва да направя: една заявка към таблицата със отговорите (choises) и още сто и петдесет заявки да да получа информацията за всеки потребител (ime, email, age, country....) или общо 151 заявки към базата-данни
А в моя случай същата информация ще я получа само с една заявка.
1. заявка към таблица choises
2. със всяка от стойностите на UserID ще трябва да направя по още една заявка за да получа конкретната информация за потребителя.
или ако 150 души са избрали опция 23 аз ще трябва да направя: една заявка към таблицата със отговорите (choises) и още сто и петдесет заявки да да получа информацията за всеки потребител (ime, email, age, country....) или общо 151 заявки към базата-данни
А в моя случай същата информация ще я получа само с една заявка.
Re: array & MySQL
Да си чувал за JOIN в SQL-a :))
SELECT u.name, u.email, u.age ..... FROM choises as c, users as u WHERE c.choise = '23' AND c.user_id = u.user_id
и си готов с една заявка.
[линк]
...
SELECT u.name, u.email, u.age ..... FROM choises as c, users as u WHERE c.choise = '23' AND c.user_id = u.user_id
и си готов с една заявка.
[линк]
...
Re: array & MySQL
Neznam dali razbira6 PHP-to, no opredeleno 6te trqbva da po4ete6 za MySQL
(ne se obijda6 nali :) Vijdam 4e admina me e izprevaril i ve4e ti e otgovoril.
Drugiqt na4in po koito moje6 da si napi6e6 (edinstvenata) zaqvka e:
Po tozi na4in si predstavi 4e kym pyrvata ti tablica user se zalepvat
vsi4ki koloni ot vtorata, no samo tezi redove za koito e izpylneno
uslovieto user.id = choices.userid.
Pozdravi!
_________________________________________
Мили деца, xxx.com не е сайта на "трите хикса".
(ne se obijda6 nali :) Vijdam 4e admina me e izprevaril i ve4e ti e otgovoril.
Drugiqt na4in po koito moje6 da si napi6e6 (edinstvenata) zaqvka e:
SELECT user.choice
FROM user
LEFT JOIN choices
ON user.id = choices.userid
Po tozi na4in si predstavi 4e kym pyrvata ti tablica user se zalepvat
vsi4ki koloni ot vtorata, no samo tezi redove za koito e izpylneno
uslovieto user.id = choices.userid.
Pozdravi!
_________________________________________
Мили деца, xxx.com не е сайта на "трите хикса".