qualitum logo
Att lista det som inte mathar. SQL-trubbel

PHPportalen Forum Index » Databaser
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
supinum



Medlem i: 3766 dagar

Status: Offline



#721774
Inlägg Skrivet: 2012-03-19 16:55      Ämne: Att lista det som inte mathar. SQL-trubbel Citera

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'.

KOD:
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
Visa användarprofil Skicka privat meddelande Besök användarens hemsida ICQ-nummer
Medda



Medlem i: 2069 dagar
Från: Sweden
Status: Offline



#721794
Inlägg Skrivet: 2012-03-19 22:34      Ämne: Citera

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
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
md2perpe
Ex-Moderator



Medlem i: 3765 dagar
Från: Hallonbergen, Kungsbodarna
Status: Offline



#721956
Inlägg Skrivet: 2012-03-24 19:17      Ämne: Re: Att lista det som inte mathar. SQL-trubbel Citera

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.

KOD:
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
Visa användarprofil Skicka privat meddelande
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget
PHPportalen Forum Index » Databaser
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic
qualitum logo