| Visa föregående ämne :: Visa nästa ämne |
| Startad av: |
Meddelande |
supinum
Medlem i: 3766 dagar
Status: Offline
#721774
|
Skrivet: 2012-03-19 16:55
Ämne: Att lista det som inte mathar. SQL-trubbel
|
|
|
Hej!
Jag sitter och sliter mitt hår över en sql-query som ska köras mot mysql 5.0.91på en av Oderlands servrar.
Jag har två tabeller. Den ena tabellen ‘files’ listar namnen på de bildfiler som ligger i en mapp för uppladdade bilder. Den andra tabellen ‘bildmeta’ rymmer fält för ett bilders meta-information.
Tanken är att jag ska titta i files.file_name efter uppladdade bilder och skapa en post per bild i ‘bildmeta’ med metainformation om de uppladdade bilderna. Förutom bildens filnamn ‘bildmeta.filnamn’ ska man här kunna lägga till information om vem som har upphovsrätt till bilden, om det är ett porträtt, vad bilden föreställer, om det är en interiörbild eller exteriör, var den är tagen, vad den ska ha för svensk bildtext, engelsk bildtext osv.
Jag skulle vilja åstadkomma en sql-query som jämför innehållet i ‘files.file_name’ med innehållet i ‘bildmeta.filnamn’ och som sedan ska lista alla rader i ‘files’ där queryn inte hittar en namne i bildmeta.filnamn. Den ska helt enkelt bara lista de bilder som inte fått någon post i bildmeta-tabellen ännu.
Efter lite sökande runt hittade jag en tråden
Matcha två rader i en SQL!. Den läsningen gav mig hopp men jag inser att jag har mycket kvar att lära kring SQL.
Ok, jag trodde jag skulle försvenska hela exemplet litegrann men insera att då ställer jag till det lite för mig. Jag sitter och försöker göra detta inom ramen för ett CMS som heter Expressionengine. Därav krull-paranteserna i kodsnutten här nedan.
Den tabell jag kallar bildmeta motsvaras av en stor tabell med hela SMS'ets alla användarskapade fält. Det förklarar kopplingen till 'channel_id 26'.
1: 2: <table>
3: <tr>
4: <td><h3>images in the filemanager</h3></td><td><h3>matced images in ch-images</h3></td>
5: </tr>
6: {exp:query sql="
7: SELECT file_name, file_id, field_id_113
8: FROM (SELECT exp_files.file_name, exp_files.file_id FROM exp_files) exp_files INNER JOIN (SELECT exp_channel_data.field_id_113 FROM exp_channel_data WHERE channel_id = 26) exp_channel_data ON exp_files.file_name # exp_channel_data.field_id_113 "}
9: <tr>
10: <td>{file_name}</td><td>{field_id_113}</td>
11: </tr>
12: {/exp:query}
13: </table>
14: 15:
|
Den här koden är min lite glatt förhoppningsfulla omtolkning av koden i tråden Matcha två rader i en SQL!. Problemet är att har jag mer än en post i bildmeta (alltså exp_channel_data.field_id_113 WHERE channel_id = 26) så listar denna query de träffar som inte matchar en gång för varje gång den inte matchar. så när jag har 10 poster i Bildmeta så kommer varja bild från Files att listas 10 gånger.
Ursäkta om jag klöddade till det här nu men jag hoppas på att någon ser vad jag är ute efter och kan hjälpa mig på spåret.
/mvh David S |
|
|
|
| Till toppen på sidan |
|
Medda

Medlem i: 2069 dagar Från: Sweden
Status: Offline
#721794
|
Skrivet: 2012-03-19 22:34
Ämne:
|
|
|
du kan använda group by för att undvika samma träffar...
Men om en fil innehåller information som du måste ha tag i, så får du nog
söka igenom varje fil och i foreach loopen titta igenom vad filen innehåller,
eller så har jag missuppfattat lite...
Om du har kopplingen i en annan tabell, så kan du nog köra en nestlad
query för att seom det finns en koppling... |
|
|
_________________ Boom Headshot! XD |
| Till toppen på sidan |
|
md2perpe


Medlem i: 3765 dagar Från: Hallonbergen, Kungsbodarna
Status: Offline
#721956
|
Skrivet: 2012-03-24 19:17
Ämne: Re: Att lista det som inte mathar. SQL-trubbel
|
|
|
| supinum skrev: |
| Jag skulle vilja åstadkomma en sql-query som jämför innehållet i ‘files.file_name’ med innehållet i ‘bildmeta.filnamn’ och som sedan ska lista alla rader i ‘files’ där queryn inte hittar en namne i bildmeta.filnamn. Den ska helt enkelt bara lista de bilder som inte fått någon post i bildmeta-tabellen ännu. |
1: SELECT files.file_name
2: FROM files
3: LEFT JOIN bildmeta
4: ON files.file_name = bildmeta.filnamn
5: WHERE bildmeta.filnamn IS NULL
|
|
|
|
_________________ 6 + sqrt(64) = 10 |
| Till toppen på sidan |
|
|