Vinnaren i pepparkakshustävlingen!
2015-06-16, 23:16
  #1
Medlem
Hejsan!

Om jag har följande tabeller:
http://forumbilder.se/EBKJL/untitled.png

Och vill hämta alla ord ur T_ORD som kan byggas av bokstäverna E,G,H,J,T genom att endast köra sql-frågor på T_ORD_BOKSTÄVER och T_BOKSTÄVER. Hur bör man då gå till väga?

I detta fall skulle "get" och "hej" hämtas.

Dvs

SELECT * FROM T_ORD WHERE ID IN ...... (På något sätt kontrollera ifall E,G,H,J,T fyller samtliga eller fler förekomster av rader för ett visst ORDID i tabellen T_ORD_BOKSTÄVER)

Någon som har någon aning?
Tack på förhand!
Citera
2015-06-17, 00:41
  #2
Medlem
poolos avatar
Är ingen expert på querys, men en lösning är att plocka först ut alla ord som inte uppfyller kravet sen därefter plocka ut de ord som inte är med i exklude-queryn :P

Kod:
select ORD from T_ORD where ord not in(
select ORD from T_ORD o
left join T_ORD_BOKSTÄVER ob on
o.ID = ob.ORDID
left join T_BOKSTÄVER b on
b.ID = ob.BOKSTAVSID
where b.BOKSTAV not in ('E','G','H','J','T'))

Min första lösning dock som came in mind var att göra en group by och count. Men den skulle inte få med ord som har samma bokstav i sig mer än 1 gång.

Citera
2015-06-17, 00:47
  #3
Medlem
Tackar för svaret! Ska försöka sätta mig in i det lite senare.

Min nuvarande lösning är inte så optimal rent SQL-frågemässigt. Den är skriven i php och arbetar med en massa forloopar och arrayer för att lösa problemet.
Citera
2015-06-17, 21:40
  #4
Moderator
Protons avatar
Man skulle ju kunna prova det som redan finns inbyggt i MySQL:

Kod:
SELECT FROM T_ORD WHERE FIND_IN_SET(Ord,'E,G,H,J,T'
Inte helt 100 på att det funkar, men väl värt att prova
Citera
2015-06-20, 00:07
  #5
Medlem
Citat:
Ursprungligen postat av Proton
Man skulle ju kunna prova det som redan finns inbyggt i MySQL:

Kod:
SELECT FROM T_ORD WHERE FIND_IN_SET(Ord,'E,G,H,J,T'
Inte helt 100 på att det funkar, men väl värt att prova
Kod:
mysql> SELECT FIND_IN_SET('HARE', 'E,G,H,J,T');
+----------------------------------+
| FIND_IN_SET('HARE', 'E,G,H,J,T') |
+----------------------------------+
|                                0 |
+----------------------------------+
1 row in set (0,00 sec)

mysql> SELECT FIND_IN_SET('HEJ', 'E,G,H,J,T');
+---------------------------------+
| FIND_IN_SET('HEJ', 'E,G,H,J,T') |
+---------------------------------+
|                               0 |
+---------------------------------+
1 row in set (0,00 sec)

mysql> SELECT FIND_IN_SET('EG', 'E,G,H,J,T');
+--------------------------------+
| FIND_IN_SET('EG', 'E,G,H,J,T') |
+--------------------------------+
|                              0 |
+--------------------------------+
1 row in set (0,00 sec)

mysql> SELECT FIND_IN_SET('E', 'E,G,H,J,T');
+-------------------------------+
| FIND_IN_SET('E', 'E,G,H,J,T') |
+-------------------------------+
|                             1 |
+-------------------------------+
1 row in set (0,00 sec)
Mera som in_array() i PHP, alltså, det man letar efter måste vara en färdig sträng i 2:a argumentet.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback