![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
I know there's a way to do it, but I'm not sure of that exact way, and I'm pretty sure whatever I come up with is gonna be so convoluted as to be worthless in the end. GAH.
Okay, someone on my flist has got to know this one: if I have a field in a MySQL db that contains an array (say, carrots, tomatoes, squash), I've no problem getting it in and no problem getting it out. (Mostly.) What I don't know is whether the search function to find that array again -- or any like it -- would require precision or could be relatively sloppy.
I mean, if I search for all fields that contain "carrots, tomatoes, squash," would I get back every field that has any of the three, or would I get back all fields with all three only if they're in the same order, or would I get back any in any order plus fields that also contain "kumquat"? (I've always treated arrays like some kinda black hole of SQL, where you put info in and it's only good as long as you don't try to do anything else with it...)
It comes down to not being sure whether I can preempt an existing db's design to insert arrays that I know I can later search/reproduce -- or if I'll need to create a new table and slot these things in separately. Unfortunately, the create-a-new-table operation would be even more hassle, given I've got to deal with WP's functions to get in and out of it, and they're not always quite as intuitive as I'd like.
So. Anyone?
Okay, someone on my flist has got to know this one: if I have a field in a MySQL db that contains an array (say, carrots, tomatoes, squash), I've no problem getting it in and no problem getting it out. (Mostly.) What I don't know is whether the search function to find that array again -- or any like it -- would require precision or could be relatively sloppy.
I mean, if I search for all fields that contain "carrots, tomatoes, squash," would I get back every field that has any of the three, or would I get back all fields with all three only if they're in the same order, or would I get back any in any order plus fields that also contain "kumquat"? (I've always treated arrays like some kinda black hole of SQL, where you put info in and it's only good as long as you don't try to do anything else with it...)
It comes down to not being sure whether I can preempt an existing db's design to insert arrays that I know I can later search/reproduce -- or if I'll need to create a new table and slot these things in separately. Unfortunately, the create-a-new-table operation would be even more hassle, given I've got to deal with WP's functions to get in and out of it, and they're not always quite as intuitive as I'd like.
So. Anyone?
no subject
Date: 13 Apr 2009 01:40 pm (UTC)(no subject)
From:no subject
Date: 13 Apr 2009 01:53 pm (UTC)Do the arrays always occur in the same order, or could you have e.g. "carrots, tomatoes" in one record, and "tomatoes, carrots" in another ? I'm guessing they're being stored as literal strings like that, or has MySQL really added some sort of array type in SQL ?
Anyway, assuming that the order could be different, and there are no specific array operations in MySQL, your search query would have something like :
(table.array1 like '%carrots%') AND (table.array1 like '%tomatoes%') AND (table.array1 like '%squash%')
... which would return any records which include all three (but also any containing any other fruits).
Serious DB programmers would recommend that you split the array field out into a new table - your main table would just have a column named "arrayindex" or something, and then you insert records into a separate table (e.g. arraytab) accordingly. In theory, it should make the queries easier in general. On the other hand, I just tried to think up the query for the three-vegetable example above and failed, although I'm a bit out of practice now ...
(no subject)
From:no subject
Date: 13 Apr 2009 03:04 pm (UTC)If it's a matter of "get me items which contain any/all of these terms in any order, but not items that contain any *other* terms"... then I think you want an extra table. It's kind of a pain, but if you do it up as a plugin it's pretty simple and controllable. I did my original-series-credits that way.
(no subject)
From: